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 に答える