我有一个非常复杂的系统,带有一些AJAX调用,可以将不同的模板呈现给PHP中的其他模板。
其中一个模板是我的实体的编辑表单。此表单隐藏在我的网站中,直到单击一个按钮,然后将触发jQuery toggle()
以切换我的网站的一部分用于此编辑表单。
在用户使用我网站上的jQuery UI滑块之前,这样可以正常工作。
如果用户在滑块内导航,我的网站部分将使用AJAX重新加载,会发生什么。
当点击toggle()
的按钮时,动画会像使用滑块一样频繁(因此如果滑块被使用了4次,那么切换将动画切换2个元素4次) 。
我通过它调试并找不到错误,我无法提供可以重建情况的jsFiddle,也无法访问该网站。点击功能只会被触发一次,所以我真的无法解释为什么会发生这种情况。
要提一下,我有3个按钮会触发此事件:
在模板中使用滑块时将显示 #poi_edit_ajax
,该模板将按照AJAX呈现。
#poi_edit_first
,并且每个AJAX都没有重新加载任何内容。
#poi_edit_last
,以便用户可以从编辑视图中返回
Javascript如下:
$("#poi_edit_ajax").click(function(){
$(".toggle_edit").toggle('slow');
});
$("#poi_edit_first").click(function(){
$(".toggle_edit").toggle('slow');
});
$("#poi_edit_last").click(function(){
$(".toggle_edit").toggle('slow');
});
我不认为有人可以给我一个只有这些信息的解决方案,但这就是我现在可以提供的一切,所以现在我的问题很简单,如果可以从jQuery告诉toggle()
函数仅运行每次点击动画。
我不认为jQuery one()
可以用于此,因为每次pagevisit只能使用一次click事件。
编辑
根据评论,我试过在AJAX调用中注册多个事件处理程序,这是真的。
解决此问题的代码很简单:
$("#comment_first").unbind("click").click(function(){
$('.toggle_information').toggle('slow');
});
$("#comment_last").unbind("click").click(function(){
$('.toggle_information').toggle('slow');
});
$("#comment_ajax").unbind("click").click(function(){
$('.toggle_information').toggle('slow');
});
我只需要再绑定Lister再绑定它,否则它们会卡住,多个Listener会对click事件作出反应!
答案 0 :(得分:1)
您可能多次绑定Click事件(通过AJAX调用加载javascript)。确保仅将Click处理程序(仅触发toggle()
)绑定一次。
看一下这个答案:https://stackoverflow.com/a/969011
该答案的A(稍加修改)引用,以供快速参考:
function alertEvent() { alert("test"); }
$(".ajax").bind("click", alertEvent);
//When you want to ensure it won't happen twice...
$(".ajax").
的取消绑定强>("click", alertEvent);
$(".ajax").bind("click", alertEvent);
此方法仅删除您指定的事件