1

わかりました、以下は私のコードです:

for (var mycounter = currentcanvas.getObjects().length; mycounter > 0; mycounter--) {
    var id = currentcanvas.getObjects().length - mycounter;
    alert(id);
    $("#frontlayers").prepend('<li id="' + id + '" class="layers"></span> Layer ' + (id + 1) + ': ' + "  " + ' </li>');
    $("#" + id).click(function(e) {
        alert(id);
    });
}​

これにより、liに「Layer1」と「Layer2」というテキストが正しく追加されますが、それらをクリックすると、アラートは常に0と1ではなく2になります。なぜこれが起こっているのか誰かが知っていますか?申し訳ありませんが、jQueryは比較的初めてです。

4

1 に答える 1

4

$.eachハンドラー関数を使用すると、変数のクロージャーに関するスコープの問題が回避されるため、これはに適していますi

$.each(currentcanvas.getObjects(), function(i, v) {
     var id = i;  // nb: numeric ID fields only allowed in HTML5
     $('<li>', {
         id: id,
         'class': 'layers',
         text: 'Layer ' + (id + 1) + ': '
     }).appendTo('#frontlayers').on('click', function(e) {
         alert(id);
     });
});

とにかく、あなたのIDはクリックされた要素に保存されているので、それを直接使用することもできます-this.id

于 2012-10-30T23:50:08.390 に答える