我在这个剧本上试了2-3个小时。它创建ul并附加li。然后我尝试附加eventListeners(单击),这将是一些功能的触发器。 在我的本地尝试回调函数只检索最后的li值。它是一个循环问题还是jquery与.on()有任何已知问题?
The Container ul tag below
<ul id="container">
<li>emtyp statically created</li>
</ul>
以下是js model js:
var xy=1;
for(xy=1; xy<10; xy++){
$("#container").append('<li id="li_'+xy+'">'+xy+'</li>');
$("#li_"+xy).on("click",function(){alert(xy)});
}
答案 0 :(得分:3)
您必须将事件分配给ul
本身,并将li
元素作为参数传递:
$('ul#container').on('click', '#li_' + xy, function() { ... });
这称为 event delegation 。
事件委托允许我们将单个事件侦听器附加到父元素,该元素将为匹配选择器的所有后代触发,无论这些后代现在是存在还是将来添加。
如果每个li
元素具有相同的click
功能,则可以将该点击处理程序完全移出for
循环。
作为旁注,您还可以将var
声明下移到for
循环中,如下所示:
for (var xy = 1; ...; ...)