避免重复jquery事件绑定

时间:2014-01-15 05:11:04

标签: javascript ruby-on-rails jquery

我遇到了一些情况,其中一些页面内容部分地被加载到ajax中,并且添加了一个包含jquery_ujs的编译js,然后重复所有ujs事件,例如当你点击删除你得到确认时,它的重复。

因此想知道如何通过任何技巧避免重复事件绑定,而不是确保js不会重新加载。或者ujs中是否有任何标志或控件,但我没有找到,我们可以实现这一点,所以任何时候重新加载ujs只能获得一次事件绑定。

嗯......为什么事件绑定不是幂等的?

除了保持这样的js文件并确保它们只加载一次之外,还有其他解决方案吗?

顺便说一句,是否有任何工具可以检测到这种重复绑定?

4 个答案:

答案 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!

希望这对你有用。