我必须根据某些服务响应动态生成一些按钮,并且还必须在点击这些按钮时附加一些处理程序。所以我正在使用jQuery.live()
,它第一次运行良好。
但是,当我使用jQuery("<some container div>").empty()
删除所有按钮并再次创建这些按钮时,现在点击按钮“处理程序调用两次”,如果我重复相同,则会触发三次并且相同。
你们可以提前帮助我吗?
答案 0 :(得分:10)
$()。live()在jQuery 1.7中被弃用,在1.9中被删除
或尝试类似
的内容$('#button').die('click').live('click', function(e) {
alert('Button click');
});
答案 1 :(得分:3)
关注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;
});
答案 2 :(得分:0)
试试这个,在你的removeButton函数上,尝试解除click事件的绑定。当你再次添加它时重新绑定它。
function removeButton(){
$("button").unbind("click");
//code for removing button
}
function addButton(){
//code for adding button
$("button").live("click", function(){
//your code
});
}
答案 3 :(得分:0)
这不是问题的直接答案。但值得注意的是。
@jAndy说:
您应该考虑尽可能使用.delegate()而不是.live()。由于.live()的事件委派始终以正文/文档为目标,因此您可以限制&#34;冒泡&#34;与.delegate()。
来自jQuery:
从jQuery 1.7开始,
.delegate()
已被.on()
方法取代。 但是,对于早期版本,.delegate()
仍然是使用事件委派的最有效方法。
<强>参考强>:
答案 4 :(得分:0)
我正在使用 Jquery 1.11.min,这对我有用:
$(document).ready(function() {
$('#button_id').off('click').on('click', function() {
//enter code here
});
});