如何将参数传递给事件的处理程序?
这是我想要做的,不起作用:
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)
我主要感兴趣的是它为什么不起作用,以及相同风格的解决方案.
谢谢.
只需使用创建者函数为您的处理程序封装要传递的参数.
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或数据集属性传递参数.
然而,更清洁的解决方案是具有如上所示的发电机功能.
| 归档时间: |
|
| 查看次数: |
3244 次 |
| 最近记录: |