我必须根据某些服务响应动态生成一些按钮,并且还必须在单击这些按钮时附加一些处理程序。所以我正在使用jQuery.live()
它,它第一次运行良好。
但是,当我使用删除所有按钮jQuery("<some container div>").empty()
并再次创建这些按钮时,现在单击按钮“处理程序调用两次”,如果我重复相同的操作,它会触发三次并且相同。
你们能帮我吗,谢谢。
我必须根据某些服务响应动态生成一些按钮,并且还必须在单击这些按钮时附加一些处理程序。所以我正在使用jQuery.live()
它,它第一次运行良好。
但是,当我使用删除所有按钮jQuery("<some container div>").empty()
并再次创建这些按钮时,现在单击按钮“处理程序调用两次”,如果我重复相同的操作,它会触发三次并且相同。
你们能帮我吗,谢谢。
$().live() 在 jQuery 1.7 中被贬值并在 1.9 中被移除
或尝试类似的东西
$('#button').die('click').live('click', function(e) {
alert('Button click');
});
关注 jquery 网站 jquery.live() :
为匹配当前选择器的所有元素附加一个事件处理程序,现在和将来。
这意味着:您使用 live 附加的事件将应用于具有相同选择器的所有元素。因此,您必须检查元素的事件,如果新元素不可用,只需附加新元素。
$("SELECTOR").live('click',function(e){
//check the event is already set
e.preventDefault();
if(e.handled === true) return false;
e.handled = true;
//Do something here
//YOUR CODE HERE
return false;
});
这不是问题的直接答案。然而,值得注意的是。
@jAndy 说:
您应该考虑尽可能使用 .delegate() 而不是 .live() 。由于 .live() 的事件委托始终以正文/文档为目标,因此您可以使用 .delegate() 限制“冒泡”。
从jQuery:
从 jQuery 1.7 开始,
.delegate()
已被该.on()
方法取代。然而,对于早期版本,.delegate()
仍然是使用事件委托的最有效方法。
参考:
试试这个,在你的 removeButton 函数上,尝试取消绑定点击事件。并在再次添加时重新绑定。
function removeButton(){
$("button").unbind("click");
//code for removing button
}
function addButton(){
//code for adding button
$("button").live("click", function(){
//your code
});
}
我正在使用 Jquery 1.11.min,这对我有用:
$(document).ready(function() {
$('#button_id').off('click').on('click', function() {
//enter code here
});
});