bil*_*oah 6 javascript ajax jquery click
我有一个结帐表单,使用PHP加载#Div-A页面加载时的一些JavaScript和HTML .javascript将click事件绑定到#Button-A同一个div中.像这样的东西:
<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>
Run Code Online (Sandbox Code Playgroud)
然后,#Global-Button创建并且javascript函数将不同的单击事件绑定到第二个按钮,然后触发#Button-A点击,如下所示:
$('#Global-Button').live('click', function(event) {
$("#Button-A").trigger("click");
})
Run Code Online (Sandbox Code Playgroud)
原因是内容#Div-A可以改变(通过ajax),因此第二个按钮充当全局触发器,无论哪个按钮或函数碰巧驻留#Div-A.
我遇到的问题是,由于某种原因,如果在页面加载#Button-A被触发两次后点击了#Global-Button .如果Ajax事件重新加载#Div-A的内容,那么一切都很好,触发器只发生一次.
我在#Div-A通过Ajax重新加载之前和之后检查了html ,一切看起来都是相同的.据我所知,在任何地方都没有重复的按钮或功能会导致触发两个事件.
我只知道关于DOM的一点点,并且只能猜测这与加载事物和绑定事件的顺序有关.
Sub*_*bha 16
始终建议在绑定之前使用'unbind'以确保事件未多次绑定.在您的情况下,可能有两种可能性 -
改变您的代码,如 -
$('#Global-Button').unbind('click').bind('click', function(event) {
$("#Button-A").trigger("click");
})
Run Code Online (Sandbox Code Playgroud)
并且 -
$('#Button-A').unbind('click').bind('click', function() {
$.ajax({
type: 'get',
url: 'some/url/gets/called',
success: function() { this happens on success }
});
});
Run Code Online (Sandbox Code Playgroud)
ume*_*mer 11
你也可以使用
$(".selector").on("click", function (**e**) {
**e**.stopImmediatePropagation();//use to stop click twice or more
})
Run Code Online (Sandbox Code Playgroud)
und*_*ore 10
不要用.live.不赞成使用Live
每次点击#Blobal-Button,你都会点击一下点击事件.所以你需要在使用之前关闭它
使用.off删除事件处理程序
$('#Global-Button').off('click');
$('#Global-Button').on('click', function(event) {
$("#Button-A").trigger("click");
})
Run Code Online (Sandbox Code Playgroud)