覆盖jQuery事件处理程序

时间:2013-09-20 10:34:35

标签: javascript jquery events

我试图覆盖jQuery事件处理程序的默认行为。但似乎无法找到有关如何执行此操作的任何文档。

假设我将点击处理程序绑定到这样的元素:

$('div#mydiv').on('click', funcName);

我想要完成的是覆盖.on函数,所以我可以修改jQuery绑定任何事件的方式

我已经尝试覆盖$.fn.on,这显然导致了一个永无止境的循环:

$.fn.on = function(eventname, callback){
  console.log(eventname + ' will be bound');

  $(this).on(eventname, callback);
};

$(function(){
  $('#element').on('click', function(){
    console.log('Did execute click');
  });
});

挂钩事件绑定过程的正确方法是什么?另外值得一提的是:我真的只想改变.on的工作方式,将其包装成不同的函数对我的情况不起作用。

1 个答案:

答案 0 :(得分:5)

您需要cache原始函数引用,如此

var originalOn = jQuery.fn.on;

jQuery.fn.on = function() {
    console.log(arguments[ 0 ] + ' will be bound');

    originalOn.apply( this, arguments );
};

这里,我们存储对jQuerys原始.on函数的引用。然后我们覆盖处理程序,但是我们使用Function.prototype.apply使用相同的上下文 + 参数调用原始函数。