如何将参数传递给事件的处理程序

Xah*_*Lee 7 javascript-events

如何将参数传递给事件的处理程序?

这是我想要做的,不起作用:

for (var i = 0; i < myobj.length; i++) {
myobj[i].onmouseover = myfun(myobj[i]);
}
Run Code Online (Sandbox Code Playgroud)

以下不起作用.

myobj[i].onmouseover = myfun.call(myobj[i]);
myobj[i].onmouseover = function () {myfun(myobj[i]);};
myobj[i].onmouseover = function () {myfun.call(myobj[i]);}; 
Run Code Online (Sandbox Code Playgroud)

我主要感兴趣的是它为什么不起作用,以及相同风格的解决方案.

谢谢.

Sir*_*rko 9

只需使用创建者函数为您的处理程序封装要传递的参数.

function createHandler( param ) {
  return function() {
    myfun( param );
  }
}

for (var i = 0; i < myobj.length; i++) {
  myobj[i].onmouseover = createHandler( myobj[i] );
}
Run Code Online (Sandbox Code Playgroud)

您的方法不起作用的原因是,因为您没有传递函数引用,而是函数调用的结果.因此,在第一个示例myfun( myobj[i] )中进行求值,结果作为事件处理程序传递.

我认为,你的真正含义是,如果事件被触发,则应评估该功能.为此,您必须通过某些全局var或数据集属性传递参数.

然而,更清洁的解决方案是具有如上所示的发电机功能.