根据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'));
});
我做错了什么?有人可以帮忙吗?
答案 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'));
});