jQuery触发点击触发两次

问题描述:

我有一个结帐窗体,当页面加载时,使用php加载一些javascript & html到#Div-A。 javascript将同一个div中的单击事件绑定到#Button-A。事情是这样的:jQuery触发点击触发两次

<div id="#Div-A"><input type="button" id="Button-A"/> 
<script type="text/javascript"> 
    $('#Button-A').bind('click', function() { 
    $.ajax({ 
     type: 'get', 
     url: 'some/url/gets/called', 
     success: function() { this happens on success }  
    }); 
});</script> 
</div> 

之后,#Global-Button创建和JavaScript函数结合不同的点击事件第二个按钮,然后触发#Button-A被点击这样的:

$('#Global-Button').live('click', function(event) { 
    $("#Button-A").trigger("click"); 
}) 

原因是, #Div-A的内容可以更改(通过ajax),因此无论哪个按钮或函数发生在#Div-A中,第二个按钮都可用作全局触发器。

我遇到的问题是,如果在页面加载后点击#全局按钮#Button-A被触发两次。如果一个Ajax事件重新加载#Div-A的内容,那么一切都很好,触发器只会发生一次,因为它应该。

我已经在通过Ajax重新加载之前和之后检查了#Div-A中的html,并且所有内容看起来都是相同的。就我所见,这肯定不会有重复的按钮或功能,这会导致触发两个事件。

我对DOM知之甚少,只能猜测这与事件加载和事件绑定的顺序有关。

建议在绑定之前使用'unbind',以确保事件未被绑定多次。在你的情况下,可能有两种可能性 -

  1. '#全局按钮'点击功能被绑定两次。
  2. '#Button-A'点击功能绑定两次,'#Global-Button'实际上触发点击一次。

更改您的代码像 -

$('#Global-Button').unbind('click').bind('click', function(event) { 
    $("#Button-A").trigger("click"); 
}) 

也 -

$('#Button-A').unbind('click').bind('click', function() { 
    $.ajax({ 
     type: 'get', 
     url: 'some/url/gets/called', 
     success: function() { this happens on success }  
    }); 
}); 
+0

谢谢。第二个位$('#Button-A')。unbind('click')。bind('click',function(){done the trick。结果是使用appendTo()重新定位按钮创建了重复绑定。我想知道是否有一种方法可以在 – billynoah

+0

左右混洗元素时避免这种情况。还有另一种选择,您可以在查询中使用非单一结果。例如,我在使用复选框时遇到了这个问题:框架生成隐藏的“输入”,虽然我假设input [name =“myname”]'是唯一的,但它不是真的。 –

请勿使用.liveLive不赞成使用。对代替

每当你在#Blobal键式点击你正在招标的点击event.So你需要再关闭使用

使用.off删除事件处理程序

$('#Global-Button').off('click'); 
$('#Global-Button').on('click', function(event) { 
    $("#Button-A").trigger("click"); 
}) 
+0

我所知道的关于(),但尽管事实这是一个很好的建议,它没有帮助。 – billynoah

您还可以使用

$(".selector").on("click", function (**e**) { 
    **e**.stopImmediatePropagation();//use to stop click twice or more 
})