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

这正确地添加了带有文本“Layer 1”和“Layer 2”的 li,但是当我单击它们时,警报始终是 2 而不是 0 和 1。有谁知道为什么会这样?抱歉,我对 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 回答