51

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

根据 jQuery API ( http://api.jquery.com/on/ ) 函数 'live' 已被弃用,建议使用 'on' 代替。但是,当我在代码中将 'live' 替换为 'on' 时,jQuery 再也找不到后来添加的元素了:

这有效(但已弃用):

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

这是 API 中“on”的一个示例:

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

当我将代码更改为此(“live”替换为“on”)时,它不再起作用(jQuery 将找不到以后添加的元素(例如,带有追加)):

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

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

4

3 回答 3

66

您应该将事件添加到li.bibeintrag.

$('ul').on('click', "li.bibeintrag", function(){
    alert('myattribute =' + $(this).attr('myattribute'));
});
于 2012-05-15T15:47:53.260 回答
35

jQuery 的 live,当通过$.on样式查看时,看起来像这样:

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

});

它将监听该document级别的点击事件,并确定它们的目标是否与 的第二个参数匹配$.on。我们鼓励您和我自己做这件事,但不是在文档级别监听,我们希望更接近元素本身(因此事件在处理之前不需要传播太远)。

由于您正在响应对 an 的点击,因此请li在该项目父级的级别上收听:

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

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

于 2012-05-15T15:50:55.500 回答
0

这应该工作

$('ul').on('click','li.bibeintrag' function(){
  alert('myattribute =' + $(this).attr('myattribute'));
});
于 2012-05-15T15:51:25.490 回答