jQuery:如何用.on替换.live?

时间:2012-05-15 15:47:15

标签: jquery

  

可能重复:
  jQuery 1.7 - Turning live() into on()

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

这可行(但已弃用):

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

这是来自'on'的API的示例:

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

当我将我的代码更改为此('live'替换为'on')时它不再起作用(jQuery将无法找到以后添加的元素(例如with append)):

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

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

3 个答案:

答案 0 :(得分:65)

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

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

答案 1 :(得分:33)

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

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

});

它会在document级别收听点击事件,并确定其目标是否与$.on的第二个参数匹配。我们鼓励你和我自己这样做,但是我们希望更倾向于听取元素本身(因此事件在处理之前不需要传播太远)而不是在文档级别进行监听。

由于您正在回复li上的点击次数,请在该项级别上听取父级:

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

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

答案 2 :(得分:0)

这应该有效

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