jQuery.live()处理程序多次启动

时间:2013-05-28 03:09:56

标签: javascript jquery html

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

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

你们可以提前帮助我吗?

5 个答案:

答案 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)

这不是问题的直接答案。但值得注意的是。

.live() vs .bind()

@jAndy说:

  

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

来自jQuery

  

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

<强>参考

  1. The Difference Between jQuery's .bind(), .live(), and .delegate()
  2. Jquery live() vs delegate()
  3. Differences Between jQuery .bind() vs .live() vs .delegate() vs .on() Introduction

答案 4 :(得分:0)

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

$(document).ready(function() {
    $('#button_id').off('click').on('click', function() {
    //enter code here
    });
});