0

我试图在鼠标悬停时获取元素的索引号。
我可以用 jQuery 轻松做到这一点,但原生 javascript 是防弹的 /:

这是jsFiddle

var ele = document.getElementsByClassName('sample')[0];

for(i=0; i<ele.children.length;i++){
    ele.children[i].onmouseover = function() {
        this.style.background='red';
        alert(i);//can't get the value
    }
}

<ul class="sample">
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>
4

3 回答 3

4

使用立即函数来修复当前迭代的 i 值:

for(i=0; i<ele.children.length;i++){
    (function(i) {
        ele.children[i].onmouseover = function() {
            this.style.background='red';
            alert(i);
        }
    }(i));
}

这是一个更新的小提琴

于 2013-01-21T22:23:18.157 回答
2

那是因为i已经被覆盖了,将它存储在一个属性中:

ele.children[i].onmouseover = function() {
    this.style.background='red';
    alert(this.getAttribute('data-index'));
};
ele.children[i].setAttribute('data-index', i);

演示

或者使用闭包:

ele.children[i].onmouseover = (function (index) {
    return function () {
        this.style.background = 'red';
        alert(index);
    };
}(i));

演示

于 2013-01-21T22:22:11.030 回答
1

试试这个:

function callback(i) {
    return function() {
        this.style.background = "red";
        alert(i);
    };
}

for (var i = 0; i < ele.children.length; i++) {
    ele.children[i].onmouseover = callback(i);
}
于 2013-01-21T22:21:33.180 回答