我遇到了一些情况,其中一些页面内容部分地被加载到ajax中,并且添加了一个包含jquery_ujs的编译js,然后重复所有ujs事件,例如当你点击删除你得到确认时,它的重复。
因此想知道如何通过任何技巧避免重复事件绑定,而不是确保js不会重新加载。或者ujs中是否有任何标志或控件,但我没有找到,我们可以实现这一点,所以任何时候重新加载ujs只能获得一次事件绑定。
嗯......为什么事件绑定不是幂等的?
除了保持这样的js文件并确保它们只加载一次之外,还有其他解决方案吗?
顺便说一句,是否有任何工具可以检测到这种重复绑定?
答案 0 :(得分:2)
虽然您应该使用更干净的方法,但有时当您正在处理其他人的代码时,只需要快速修复以确保不会多次设置事件(使用模糊代码),那么我已经完成了:
$(someSelector).off('click').on('click', function(event)
{
// whatever
});
答案 1 :(得分:1)
如果你在家里发现垃圾,你会清理它还是装饰它?
你有责任确保没有加载不必要的js。就这么简单。
答案 2 :(得分:0)
这样的东西?
$(selector).on('click',function(){
//do stuff here
$(this).off('click');
});
或者您可以使用以下内容:
var clicked = false;
$(selector).on('click',function(){
if(!clicked){
clicked = true;
//do stuff here
.....somefunc(){
clicked = false;
}
...
}
});
答案 3 :(得分:0)
在Javascript中有一些称为Self * -Defining Functions *的东西。当您的函数有一些初步的准备工作要做并且它只需要执行一次时,此模式很有用。在这种情况下,自定义函数可以更新自己的实现。
例如
var shout= function(){
alert('shout!');
shout= function(){
alert('shout again');
}
}
//using self-defining function
shout(); // shout!
shout(); // shout again!
希望这对你有用。