0

このコードは私にとってはうまく機能しますが、リスナー内の 2 つの変数が、クリックした項目を表す動的な数値である必要があります。もちろん、現在は「7」にハードコードされていますが、必要なのは動的にすることだけです。

var items = document.getElementsByClassName('largeItems');

for (var i = 0; i < items.length; i++) {
    items[i].addEventListener('click', function() {
        var itemWays = 7;
        var currentItem = 7;
        document.getElementById('display').src = detailsImage[itemWays];
    }, false);
}

私はこのようなものが欲しいと思います:

var itemWays = this.items[i]; //this.itemIndex that was clicked
var currentItem = this.items[i]; //this.itemIndex that was clicked

乾杯、

4

1 に答える 1

1

HTMLElementですthis。_ インデックスiは、for ループ中に大量の値を取得するため、キャプチャするのが少し難しくなります。関数でラップしてその値を「保存」すると機能します。

var items = document.getElementsByClassName('largeItems');

for (var i = 0; i < items.length; i++) {
    (function(i) {
        items[i].addEventListener('click', function() {
            var itemWays = i;
            var currentItem = this;
            document.getElementById('display').src = detailsImage[itemWays];
        }, false);
    })(i);
}

IE8 以下を使用していない場合は、

Array.prototype.forEach.call(document.getElementsByClassName('largeItems'), function(item, i) {
    item.addEventListener('click', function() {
        var itemWays = i;
        var currentItem = this;
        document.getElementById('display').src = detailsImage[itemWays];
    });
}); 
于 2013-11-08T10:01:05.857 に答える