javascript中绑定带参数的事件响应函数

function addEventHandler(oTarget, sEventType, fnHandler) {
 
    if (oTarget.addEventListener) {           //兼容Mozilla
        oTarget.addEventListener(sEventType, fnHandler, false);
    } else if (oTarget.attachEvent) {
        oTarget.attachEvent("on" + sEventType, fnHandler);
    } else {
        oTarget["on" + sEventType] = fnHandler;
    }
};

 /*
* 获得带参数的事件句柄的引用
*
* @param obj 需要绑定事件处理函数的所有者,null 表示 window 对象
* @param func 需要绑定的事件处理函数名
* @param ... 第三个参数开始为绑定事件处理函数的参数,由 0 到多个构成
*/
function bind(obj, handler) {
obj = obj || window;
var args = [];
for(var i =2; i < arguments.length; i++)
{
args.push(arguments[i]);
}
return function() { handler.apply(obj, args) };
};

 

 

 

 

//采用2级事件模型的方式给响应函数传参数。

addEventHandler(col, "mouseover", bind(col, mouseover, col));   

//JavaScript事件属性的方式          

col.οnmοuseοver=bind(col,mouseover,col);

 

 

 

 

col.οnmοuseοver=function(){this.className="mouseover";}

不能用这种:

addEventHandler(col, "mouseover", function(){this.className="mouseover"});

这个中间的this已经不是col了。需要把,这个col对象传递给响应函数。
  像下面这样:

addEventHandler(col, "mouseover", bind(col, mouseover, col));               

var mouseover = function (obj) {
    obj.className = "mouseover";
}

//这样呢?

addEventHandler(col, "mouseover", myCal.mouseover));

mouserover:function(){

this.className="mouseover";

}      

当事件发生时,这个this是window对象,而不是myCal对象,也一定是事件源对象。所以也不行!!

 

 

注意:addEventHandler(myCal.relation, "focus", myCal.Show) 相当于addEventHandler(myCal.relation, "focus", function(){myCal.Show();})

这样绑定后,当事件产生时,

myCal.Show()中的this将不再表示的是myCal这个对象,而是window对象。

myCal.show(){

this

}

但是如果用这种方式:

idCalendarNext.onclick = function () { myCal.NextMonth() };

myCal.NextMonth(){

this

}中的this还是表示myCal对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值