2

我正在尝试覆盖 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,将其包装成不同的功能对我的情况不起作用。

4

1 回答 1

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

于 2013-09-20T10:37:43.060 回答