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',以确保事件未被绑定多次。在你的情况下,可能有两种可能性 -
- '#全局按钮'点击功能被绑定两次。
- '#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 }
});
});
答
您还可以使用
$(".selector").on("click", function (**e**) {
**e**.stopImmediatePropagation();//use to stop click twice or more
})
谢谢。第二个位$('#Button-A')。unbind('click')。bind('click',function(){done the trick。结果是使用appendTo()重新定位按钮创建了重复绑定。我想知道是否有一种方法可以在 – billynoah
左右混洗元素时避免这种情况。还有另一种选择,您可以在查询中使用非单一结果。例如,我在使用复选框时遇到了这个问题:框架生成隐藏的“输入”,虽然我假设input [name =“myname”]'是唯一的,但它不是真的。 –