如何将click事件添加到动态ID

时间:2014-08-26 17:52:23

标签: javascript jquery

我有一个ul列表,它将随着数量的增加而动态创建。我有一个for循环来将点击绑定到所有UL

我需要做的是当用户点击它时,删除之前选择的列表并将点击添加为选中。

for循环中的k值对于增加列表的选择不正确,但它对于click函数是正确的。

我想知道它为什么(k)不正确?正确绑定所有5个ul的点击事件,但不在点击事件内。

当我在console.log中为所有ul打印k6。我想知道原因。怎么解决这个?

CODE

jQuery(document).ready(function(){
    for(var k=1;k<=5;k++){
        jQuery("#sample"+k+" li").click(function(){
            console.log(k);
            jQuery("#sample"+k+" li.selected").removeAttr('class');//removing previous selection
            jQuery(this).addClass('selected');//adding selection for clicked one
        });
    }
});

JSFIDDLE

2 个答案:

答案 0 :(得分:1)

您可以使用jQuery事件委派来侦听父级上的事件并将其传递给子级。这是捕获动态添加元素的首选方法。

请参阅:jQuery event delegation with .on (this reference)

答案 1 :(得分:0)

您正尝试在for循环中绑定k的值,但问题是当您单击li for循环已完成时。

您可以使用函数绑定k的每个值。

做类似下面的事情

function addClick(k){
    jQuery("#sample"+k+" li").click(function(){
            console.log(k);
            jQuery("#sample"+k+" li.selected").removeAttr('class');//removing previous selection
            jQuery(this).addClass('selected');//adding selection for clicked one
        });
}

jQuery(document).ready(function(){
    for(var k=1;k<=5;k++){
        addClick(k)
    }
});

DEMO