0

可能重复:
循环内的 Javascript 闭包 - 简单的实际示例

我想在遍历列表项数组时输出数组中的悬停位置。然而我的逻辑是完全错误的,因为在循环完成时'i'总是设置为数组的长度,所以我总是得到数组长度值而不是数组中的所需位置。

我需要获取包含相应列表项编号的警报。

HTML

<ul>
    <li class='listItem'>listitem1</li>
    <li class='listItem'>listitem2</li>
    <li class='listItem'>listitem3</li>
</ul>

JS

var arr = document.getElementsByClassName('listItem');
for (var i = 0; i < arr.length; i++) {
    arr[i].onmouseover = function() {
        alert(i);
    }
}

http://jsfiddle.net/EHcDp/4/

提前致谢!

4

2 回答 2

3
var arr = document.getElementsByClassName('listItem');
for (var i = 0; i < arr.length; i++) {
    (function(i) {
        arr[i].onmouseover = function() {
            alert(i);
        }
    }(i));
}

阅读此副本以了解其工作原理/方式。

于 2012-08-22T11:02:53.200 回答
2

你需要一个闭包

var arr = document.getElementsByClassName('listItem');
for (var i = 0; i < arr.length; i++) {
    arr[i].onmouseover = (function(x) {
        return function() {
            alert(x);
        };
    }(i));
}
于 2012-08-22T11:05:07.923 回答