如何将参数传递给事件的处理程序?
这是我想要做的,不起作用:
for (var i = 0; i < myobj.length; i++) {
myobj[i].onmouseover = myfun(myobj[i]);
}
以下两者都不起作用。
myobj[i].onmouseover = myfun.call(myobj[i]);
myobj[i].onmouseover = function () {myfun(myobj[i]);};
myobj[i].onmouseover = function () {myfun.call(myobj[i]);};
我主要关注它为什么不起作用,以及相同风格的解决方案。
感谢。
答案 0 :(得分:9)
只需使用处理程序的创建者函数来封装要传递的参数。
function createHandler( param ) {
return function() {
myfun( param );
}
}
for (var i = 0; i < myobj.length; i++) {
myobj[i].onmouseover = createHandler( myobj[i] );
}
您的方法不起作用的原因是,因为您没有传递函数引用,而是函数调用的结果。因此,在您的第一个示例中,myfun( myobj[i] )
被评估,结果将作为事件处理程序传递。
我认为,你的真正含义是,如果事件被触发,则应评估该功能。为此,您必须通过某些全局变量或dataset property传递参数。
然而,更清洁的解决方案是具有如上所示的生成器功能。
答案 1 :(得分:3)
另一种方法是使用onmouseover
作为方法(不是函数)在触发事件的DOM元素上调用的事实。
换句话说,编写代码就好像您希望有人这样做:
obj = xahlees();
obj.onmouseover();
这是一个解决方案:
for (var i = 0; i < myobj.length; i++) {
myobj[i].onmouseover = function() { myFun(this) };
}