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));
}

ここに更新されたfiddleがあります。

于 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 に答える