jQuery:如何用.onreplace.live?

可能重复:
jQuery 1.7 – 将live()变成on()

根据jQuery API( http://api.jquery.com/on/ ),“live”函数已被弃用,build议使用“on”代替。 但是当我用代码中的'on'replace'live'时,jQuery找不到以后添加的元素:

这工作(但不赞成):

$('li.bibeintrag').live('click', function(){ alert('myattribute =' + $(this).attr('myattribute')); }); 

这是“on”API的一个例子:

 $("#dataTable tbody tr").on("click", function(event){ alert($(this).text()); }); 

当我改变我的代码('活'换成'开')它不工作了(jQuery不会find后来添加的元素(例如与追加)):

 $('li.bibeintrag').on('click', function(){ alert('myattribute =' + $(this).attr('myattribute')); }); 

我究竟做错了什么? 有人可以帮忙吗?

您应该将事件添加到li.bibeintrag任何父元素。

 $('ul').on('click', "li.bibeintrag", function(){ alert('myattribute =' + $(this).attr('myattribute')); }); 

当通过$.on风格查看时,jQuery的直播看起来像这样:

 $(document).on("click", "li.bibeintrag", function(){ }); 

它将监听document级别的单击事件,并确定它们的目标是否匹配$.on的第二个参数。 我们鼓励你们自己来做,而不是在文档层面上听,我们要更接近元素本身(所以事件在处理之前不需要传播太多)。

由于您是在点击某个li回应,请在该项目的父级别处听:

 $("ul#myList").on("click", "li.bibeintrag", function(){ /* Respond */ }); 

请记住,如果不提供$.on的第二个参数,则事件处理程序会绑定到元素本身,这意味着您不会获得$.live的行为,这会对dynamic添加的元素做出反应。

这应该工作

 $('ul').on('click','li.bibeintrag' function(){ alert('myattribute =' + $(this).attr('myattribute')); });