Javascript 多次触发jQuery.live()处理程序
我必须根据一些服务响应动态生成一些按钮,还必须在单击这些按钮时附加一些处理程序。因此,我使用了Javascript 多次触发jQuery.live()处理程序,javascript,jquery,html,Javascript,Jquery,Html,我必须根据一些服务响应动态生成一些按钮,还必须在单击这些按钮时附加一些处理程序。因此,我使用了jQuery.live(),它第一次运行良好 但当我使用jQuery(“”.empty()删除所有按钮并再次创建这些按钮时,现在单击按钮“handler calls twitter”,如果我重复相同的操作,则会触发三次相同的操作 你们能提前帮我吗,thanx。关注jquery网站jquery.live(): 为与当前事件匹配的所有元素附加事件处理程序 选择器,现在和未来 这意味着:使用live附加的事件
jQuery.live()
,它第一次运行良好
但当我使用jQuery(“”.empty()
删除所有按钮并再次创建这些按钮时,现在单击按钮“handler calls twitter”,如果我重复相同的操作,则会触发三次相同的操作
你们能提前帮我吗,thanx。关注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;
});
尝试此操作,在removeButton函数上,尝试解除单击事件的绑定。并在再次添加时重新绑定
function removeButton(){
$("button").unbind("click");
//code for removing button
}
function addButton(){
//code for adding button
$("button").live("click", function(){
//your code
});
}
$().live()在jQuery 1.7中折旧,在1.9中删除
或者试试类似的东西
$('#button').die('click').live('click', function(e) {
alert('Button click');
});
这不是对这个问题的直接回答。然而,值得注意的是 @詹迪说: <>你应该考虑使用.委派()代替.LVER()。由于.live()的事件委派始终以主体/文档为目标,因此您可以限制.delegate()的“冒泡” 和来自: 从jQuery 1.7开始,
.delegate()
已被.on()
方法取代。
但是,对于早期版本,.delegate()
仍然是使用事件委派的最有效方法
参考:
我正在使用Jquery 1.11.min,这对我很有用:
$(document).ready(function() {
$('#button_id').off('click').on('click', function() {
//enter code here
});
});
你能发布你的代码吗?是的,我知道它已被弃用,但我们正在使用的版本不支持()。一些单击处理程序,$(“#删除”+id)。活动('click',函数(evt){if(liveEventHandler(evt)){self.removeComponentFromPrint(self);}});在
live()
之前使用die()
或确保脚本只运行一次。并尝试在jQuery 1.7之后使用.off()
和替换die()
和live()
,调用die()没有意义,因为这些元素已被删除,但是再次添加这些元素时,它会调用两次和三次。使用.die()而不是.unbind()来删除与.live()连接的任何处理程序。您是否尝试过按照Hendy的建议将unbind()替换为die()?所有答案都很好,但这就是问题的解决方法!