如何将参数传递给事件的处理程序
How to pass a parameter to a event's handler
如何将参数传递给事件的处理程序?
这是我尝试做的事情,但它不起作用:
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) };
}
我上传了一个更完整的示例.
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- Adobe Edge:动画完成时添加onComplete处理程序
- 是否可以从输入处理程序中确定输入的类型
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 平均值.on(事件[,选择器][,数据],处理程序)
- getSript在同一对象上多次添加处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何让React JS点击处理程序在执行时更新DOM
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数