javascript中绑定带参数的事件响应函数
2012-06-02 14:05
260 查看
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.onmouseover=bind(col,mouseover,col);
col.onmouseover=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对象。
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.onmouseover=bind(col,mouseover,col);
col.onmouseover=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对象。
相关文章推荐
- JavaScript在for循环中绑定事件解决事件参数不同的情况
- JavaScript---事件绑定方式(传递参数)
- JavaScript事件属性绑定带参数的函数
- JavaScript为动态生成的标签绑定事件-参数
- JavaScript在for循环中绑定事件解决事件参数不同的情况
- JavaScript中关于绑定事件句柄问题
- javascript事件绑定
- javascript-事件绑定和普通事件
- JavaScript 事件绑定的方法说明
- javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
- JavaScript基础 点击div块后背景颜色发生变化 事件的函数参数是this
- JavaScript之事件的绑定与移除
- 如果理解Javascript利用闭包循环绑定事件
- 模板列onclick事件中绑定跳转页参数(onclick location.href Eval)
- javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
- 使用jQuery绑定事件,为回调函数传递参数遇到的坑
- Javascript循环绑定事件的示例代码
- javascript attachEvent绑定多个事件执行顺序问题