如何以编程方式附加和删除事件处理程序

时间:2017-01-05 07:43:43

标签: jquery programmatically

是否有一种简单明了的方法可以将这两个函数作为单个函数编写而无需重复。我想我想以编程方式设置开/关方法。

function attachEventHandler(){
   $(document).on({
      ajaxStart: function() {
         $("body").addClass("loading");
      },
      ajaxStop: function() {
         $("body").removeClass("loading");
      }
   });
}

function removeEventHandler(){
   $(document).off({
      ajaxStart: function() {
         $("body").addClass("loading");
      },
      ajaxStop: function() {
         $("body").removeClass("loading");
      }
   });
}

2 个答案:

答案 0 :(得分:1)

我想到的最简单的答案是

var handlers = {
      ajaxStart: function() {
         $("body").addClass("loading");
      },
      ajaxStop: function() {
         $("body").removeClass("loading");
      }
   }

function attachEventHandler(toggle){
   // here we are selecting the 'on' or 'off'
   // property of the $(document) jquery element
   // depending on whether the toggle is true or
   // false. Because the 'on' and 'off' props are
   // functions, we can call the property with
   // `handlers` as the argument
   $(document)[toggle ? 'on' : 'off'](handlers);
}

并像这样使用它:

attachEventHandler(true) // turn on
attachEventHandler(false) // turn off

答案 1 :(得分:0)

您可以使用.on()将函数绑定到多个事件:

$('#element').on('keyup keypress blur change', function(e) {
// e.type is the type of event fired
});

或者只是将函数作为参数传递给普通事件函数:

var myFunction = function() {
...
}

$('#element')
.keyup(myFunction)
.keypress(myFunction)
.blur(myFunction)
.change(myFunction)