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

    }

});

所有元素都是不同的,我直接在元素中附加事件,我尝试在将事件添加到元素之前和之后附加,但不起作用,所有元素都获取最后一个事件。

如果您单击<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回调函数,内部日志函数都共享它。

在您的第二个循环中,该generator变量属于each每个项目调用一次的回调函数,因此日志函数都看到一个不同的变量。

于 2012-08-22T23:41:01.647 回答