javascript - 重写 jQuery 事件处理程序

标签 javascript jquery events

我试图覆盖 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/

相关文章:

javascript - react 或 npm 问题 : Module not found: [CaseSensitivePathsPlugin] `...\react.js` does not match the corresponding path on disk `react`

javascript - 根据表单的选择显示/隐藏标记不做任何事情

javascript - 调整图像大小以适应大于图像宽度的浏览器窗口

javascript - 如何创建多个切换按钮

jquery - 当用户点击刷新时处理ajax错误

javascript - 在谷歌图表中显示 json 正文

javascript - jQuery 没有进行异步调用 evel async :false specified

javascript - 在浏览器控制台中监控所有 JavaScript 事件

javascript - 如何使用angularjs在窗口关闭时触发一个函数

objective-c - Cocos2d - Mac : Check for keyboard events?