Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重写jQuery事件处理程序_Javascript_Jquery_Events - Fatal编程技术网

Javascript 重写jQuery事件处理程序

Javascript 重写jQuery事件处理程序,javascript,jquery,events,Javascript,Jquery,Events,我试图覆盖jQuery事件处理程序的默认行为。但似乎找不到任何关于如何做到这一点的文档 假设我将单击处理程序绑定到如下元素: $('div#mydiv').on('click', funcName); 我试图完成的是覆盖函数上的,这样我就可以修改jQuery绑定任何事件的方式 我已经尝试在上覆盖$.fn.,这显然导致了一个never-ender循环: $.fn.on = function(eventname, callback){ console.log(eventname + ' wil

我试图覆盖jQuery事件处理程序的默认行为。但似乎找不到任何关于如何做到这一点的文档

假设我将单击处理程序绑定到如下元素:

$('div#mydiv').on('click', funcName);
我试图完成的是覆盖函数上的
,这样我就可以修改jQuery绑定任何事件的方式

我已经尝试在
上覆盖
$.fn.,这显然导致了一个never-ender循环:

$.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');
  });
});

挂接事件绑定过程的正确方法是什么?同样值得一提的是:我真的只想改变
的工作方式。在
上,将其包装到不同的函数中对我的情况不起作用。

您需要像这样
缓存原始函数引用

var originalOn = jQuery.fn.on;

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

    originalOn.apply( this, arguments );
};

在这里,我们将对jQuerys original
的引用存储在
函数中。然后覆盖处理程序,但使用
function.prototype.apply

使用相同的上下文+参数调用原始函数,我建议将其包装为
(function(){…})()阻塞只是为了确保
originalOn
不会被意外覆盖。@t.niese通常我会同意,但我只是想澄清这一点,并展示如何正确调用存储函数引用。我让OP来正确处理他的应用程序上下文。当然,我只想提一下。它应该被看作是答案的补充,而不是影响答案质量的东西。(我应该清楚这一点)哇,简单又漂亮。喜欢它。谢谢