我试图覆盖 jQuery 事件处理程序的默认行为。但似乎找不到任何有关如何执行此操作的文档。
假设我将点击处理程序绑定(bind)到这样的元素:
$('div#mydiv').on('click', funcName);
我想要完成的是覆盖 .on
函数,这样我就可以修改 jQuery 绑定(bind)任何事件的方式
我已经尝试过覆盖 $.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');
});
});
Hook 事件绑定(bind)过程的正确方法是什么?另外值得一提的是:我真的只是想改变 .on
的工作方式,将其包装到不同的函数中对我的情况不起作用。
最佳答案
您需要像这样缓存
原始函数引用
var originalOn = jQuery.fn.on;
jQuery.fn.on = function() {
console.log(arguments[ 0 ] + ' will be bound');
originalOn.apply( this, arguments );
};
在这里,我们存储对 jQuery 原始 .on
函数的引用。然后我们覆盖处理程序,但我们使用 Function.prototype.apply
调用具有相同上下文 + 参数的原始函数。
关于javascript - 重写 jQuery 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914637/