Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多次触发jQuery.live()处理程序_Javascript_Jquery_Html - Fatal编程技术网

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()?所有答案都很好,但这就是问题的解决方法!