我试图覆盖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
的工作方式,将其包装成不同的函数对我的情况不起作用。
答案 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
使用相同的上下文 + 参数调用原始函数。