日期:2014-05-16  浏览次数:20276 次

求一个事件封装,跪求高手指点。
on : function(node, eventType, handler) {
node = typeof node == 'string' ? document.getElementById(node) : node;
if (document.all)
node.attachEvent('on' + eventType, handler);
else
node.addEventListener(eventType, handler, false);
}

想在回调handler里加入自己的参数,具体不知道实现在的方法。

自己试写了一下,但是总感觉不太对劲。
on : function(node, eventType, param, scope, callback) {
node = typeof node === 'string' ? document.getElementById(node) : node;
if (document.all)
node.attachEvent('on' + eventType, callback);
else
node.addEventListener(eventType, function(event){
var scope = scope || window;
var param = param;
param.unshift(event);
callback.call(scope,param);
}, false);
}


------解决方案--------------------
JScript code
        var on = function(node, eventType, param, callback) {
            node = typeof node === 'string' ? document.getElementById(node) : node;
            if(node.addEventListener){
                node.addEventListener(eventType, function(event){
                    event.data = param;
                    callback.call(node, event);
                }, false);
            }else{
                node.attachEvent('on' + eventType, function(){
                    event.data = param;
                    callback.call(node, event);
                });
            }
        }

------解决方案--------------------
on : function(node, eventType, param, scope, callback) {
node = typeof node === 'string' ? document.getElementById(node) : node;

function innerCallback()
{
var scope = scope || window;
var param = param; 
callback.apply(scope,param);
}

if (document.all)
node.attachEvent('on' + eventType, innerCallback);
else
node.addEventListener(eventType, function(event){
innerCallback(event);
}, false);
}