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

How to pass a parameter to a event's handler

本文关键字:处理 程序 事件 参数传递      更新时间:2023-09-26

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

这是我尝试做的事情,但它不起作用:

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]);}; 

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

只需为处理程序使用 creator 函数来封装要传递的参数。

function createHandler( param ) {
  return function() {
    myfun( param );
  }
}
for (var i = 0; i < myobj.length; i++) {
  myobj[i].onmouseover = createHandler( myobj[i] );
}

您的方法不起作用的原因是,您传递的不是函数引用,而是函数调用的结果。因此,在您的第一个示例中,将评估myfun( myobj[i] )并将结果作为事件处理程序传递。

我认为,您的真正意思是,如果触发事件,则应评估函数。为此,您必须通过某个全局变量或作为数据集属性传递参数。

然而,更清洁的解决方案是具有如上所示的生成器功能。

另一种方法是使用onmouseover将被调用为触发事件的 DOM 元素上的方法(而不是函数)的事实。

换句话说,编写代码就好像你期望有人这样做一样:

obj = xahlees();
obj.onmouseover();

这是一个解决方案:

for (var i = 0; i < myobj.length; i++) {
  myobj[i].onmouseover = function() { myFun(this) };
}

我上传了一个更完整的示例.