4

我必须根据某些服务响应动态生成一些按钮,并且还必须在单击这些按钮时附加一些处理程序。所以我正在使用jQuery.live()它,它第一次运行良好。

但是,当我使用删除所有按钮jQuery("<some container div>").empty()并再次创建这些按钮时,现在单击按钮“处理程序调用两次”,如果我重复相同的操作,它会触发三次并且相同。

你们能帮我吗,谢谢。

4

5 回答 5

11

$().live() 在 jQuery 1.7 中被贬值并在 1.9 中被移除

或尝试类似的东西

$('#button').die('click').live('click', function(e) {
        alert('Button click');
    }); 
于 2013-05-28T05:01:43.570 回答
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;
    });
于 2013-05-28T03:17:00.177 回答
0

这不是问题的直接答案。然而,值得注意的是。

.live() 与 .bind()

@jAndy 说:

您应该考虑尽可能使用 .delegate() 而不是 .live() 。由于 .live() 的事件委托始终以正文/文档为目标,因此您可以使用 .delegate() 限制“冒泡”。

jQuery

从 jQuery 1.7 开始,.delegate()已被该.on()方法取代。然而,对于早期版本,.delegate()仍然是使用事件委托的最有效方法。

参考

  1. jQuery 的 .bind()、.live() 和 .delegate() 之间的区别
  2. Jquery live() 与委托()
  3. jQuery .bind() 与 .live() 与 .delegate() 与 .on() 的区别
于 2014-06-18T13:06:17.580 回答
0

试试这个,在你的 removeButton 函数上,尝试取消绑定点击事件。并在再次添加时重新绑定。

function removeButton(){
   $("button").unbind("click");
  //code for removing button
}

function addButton(){
  //code for adding button
  $("button").live("click", function(){ 
       //your code
  });
}
于 2013-05-28T03:37:17.223 回答
0

我正在使用 Jquery 1.11.min,这对我有用:

$(document).ready(function() {
    $('#button_id').off('click').on('click', function() {
    //enter code here
    });
});
于 2021-02-17T10:42:54.343 回答