2012-02-07 9 views
5

私は現在私の大学のプロジェクトに取り組んでいます。私がそこでやる必要があることは、登録されたすべてのjavascript-eventhandlerをサーバーと同期させることです。私。どの要素に特定のイベントハンドラがあるのか​​を知る必要があります。JavaScript/jQuery:新しく登録されたイベントハンドラを聞きます。

私はすでにを使用して、どの要素にイベントハンドラがあり、本当にうまく機能しているか調べています。

しかし、私が必要とするのは、イベントハンドラがDOM要素に登録されるたびに呼び出されるイベントリスナを持つことです。

基本的にいつも$("#foo").click(...)または$("#foo").bind(...)のような何かが呼び出されると、この要素に新しいイベントハンドラが登録されているという情報を取得する必要があります。

逆の場合イベントハンドラがDOM要素から削除されたときにリスナーが必要ですが、最初のプロトタイプでは必須ではありません。

ハンドラをすべてのイベントハンドラ登録にグローバルに付加する方法はありますか?

さらに詳しい情報が必要な場合は、お気軽にコメントしてください。

ありがとうございました!

敬具、 ロバート

+1

サーバーがする必要がない理由知っている? – zzzzBov

+0

これはウェブサイトを遠隔操作するための研究プロジェクトの一部です。したがって、サーバーはどの要素がクリック可能であるかを知る必要があります。 –

+0

私はこの問題に近づけるより良い方法があると確信していますが、私はあなたに良いアドバイスを与えるために問題について十分に知りません。 – zzzzBov

答えて

8

あなたはjQueryの1.7以降を使用している場合は、イベントをアタッチするすべてのメソッドがjQuery.fn.onを通過し、それがその関数に乗っ過剰と野生行くの単純なケースです。

(function() { 

    var old = jQuery.fn.on; 

    jQuery.fn.on = function (events, selector, data, handler) { 
     // Ensure you still attach the events 
     var result = old.apply(this, arguments); 

     // Now do your own thing 

     // Inside here, `this` refers to the jQuery object on which `on` was invoked; 
     // it's not a specific element like it normally is within jQuery. You then 
     // therefore use something like `this.each(function() { /* this */ }); to 
     // target each element in the set. 

     // You might want to normalize the variables, as selector and data are optional, 
     // and events can be an object or string 
     jQuery.post('/spy.php', { 
      events: events, 
      selector: selector, 
      data: data 
     }, jQuery.noop); 

     return result; // keep the signature of `on`, and return the value `on()` *would* have done. 
    }; 

}()); 

あなたはjQueryの< 1.7を使用していてアップグレードできない場合は、上記と同様の何かを行うことができますが、bind()を上書きする必要があります、live()delegate()など

+2

イベントがアタッチされた要素を特定するにはまだいくつかの方法が必要ですが、すべての要素がマークアップ内で一意のIDを持っていない限り、その仕組みがわからないその場合、あなたは 'elements:this.map(function(){return this.id;})。get()。join("、 ")'のようなものをポストで使うことができます。 –

+0

これは完璧に動作します、非常にマットとデイブに感謝! :) –

関連する問題