0

のように「オンザフライ」で要素にイベントを設定する必要がありますがvar X = $('HTML CODE HERE')、イベントを最後の要素に設定すると、他のすべての要素がこの最後のイベントを取得します。

ここでの例:http://jsfiddle.net/QmxX4/6/

$(document).ready(function() {

    var ulItem = $('.lst');

    for (var x=0; x<5; x++) {

        var newItemElement = $('<li style="border:solid 1px blue;width:200px;height:40px;"></li>');
        ulItem.append(newItemElement);

        var generator = Math.random();
        newItemElement.on('click', function() {
            console.log(generator);  
        });

    }

});

すべての要素は異なります。要素にイベントを直接アタッチします。要素にイベントを追加する前後に追加しようとしますが、機能しません。すべての要素が最後のイベントを取得します。

最後のイベントで生成されたgetコードをクリックしても<li></li>、「理論的には」すべての要素に異なるイベントがアタッチされている場合。

しかし、次のように、アイテムを追加した後に他のループ追加要素を作成すると<ul></ul>、次のようになります。

$.each($(ulItem).children('li'), function(i, item) {
    console.log($(this));
    var generator = Math.random();
    $(this).on('click', function() {
         console.log(generator);
    });
});

動作します...問題は何ですか?

4

1 に答える 1

2

最初のループでは、generator変数はコールバック関数に属しready、内部のログ関数はすべてそれを共有します。

2番目のループでは、変数はアイテムごとに1回呼び出されるコールバック関数にgenerator属しているため、ログ関数はすべて異なる変数を参照します。each

于 2012-08-22T23:41:01.647 に答える