javascript - 在循环中附加事件 (IE 7)

标签 javascript events for-loop closures anonymous-function

我正在尝试将函数绑定(bind)到 Internet Explorer 7 中节点列表中的项目。

for(var j = 0; j < navLabels.length; j++)
{
    navInsets[j].onmouseover = function(){showLabel(navLabels[j], true);};
    navInsets[j].onmouseout = function(){showLabel(navLabels[j], false);};
    navInsets[j].onclick = function(){selectNew(j);};
    navLabels[j].onclick = function(){selectNew(j);};
}

showLabel() 和 selectNew() 都是我自己的函数。它们每个都需要传递一个索引,在本例中为 j。

我知道,在匿名函数内部,j 最终将成为对 j 的引用,而不是 j 的值。我也知道我可以使用 addEventListener 或 bind 方法来执行此操作,但这两种方法在 IE 7 中都是不允许的。我什至知道 AttachEvent 方法适用于 ie7,但由于我需要传递参数,所以我需要换行匿名函数中的函数使用attachEvent(至少看起来是这样),这就是最初的问题。

关于这个主题有什么不太老套的想法吗?谢谢。

最佳答案

使用匿名函数来隐藏j:

(function(j) {
    navInsets[j].onclick = function() {selectNew(j);};
    ...
})(j);

这将强制 j 在函数范围内按值传递。

关于javascript - 在循环中附加事件 (IE 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593899/

相关文章:

c# - += new EventHandler(Method) 与 += 方法

javascript - .keyup 不会因删除输入字段中的第一个字符而触发

javascript - 事件绑定(bind)是什么意思?

javascript - 在哪些情况下我应该使用 'while loops' 而不是 JavaScript 中的“for 循环”?

javascript - While 和 For 循环

Python:for循环在列表理解上的性能

javascript - Window.getComputedStyle 的参数 1 未实现接口(interface) Element

带有回车符和换行符的javascript错误

javascript - 如何根据 jquery 中的选定选项卡交换选项卡名称

JavaScript - 原型(prototype)方法未定义