2011-03-14 5 views
7

私ができる方法を探していますは、ウェブサイト上でJS(または他のスクリプト)で作られたすべてのイベントリスナーバインディングを一覧表示しています()。私は主に(デバッグの理由で)ダブルバインディングを見つけたいと思っていますが、他の問題もあると思います。は、すべてのイベントリスナーのバインディングをjavascriptで取得する方法はありますか?

ブリリアントはブラウザのプラグインになります。ブラウザのプラグインで、どの要素にどの種類のイベントリスナーがバインドされているかがわかります。この場合、リンク、スクリプトやコメント;-)

+2

jQueryのためのこのようなものがあります。 FirebugというFirebugの拡張版です。http://firequery.binaryage.com/しかし、ネイティブのjavascriptイベントでも動作するかどうかはわかりません。 – meo

+0

hm ...それは最初のステップです...おそらくそれに慣れるのに時間が必要でしょう – helle

答えて

2

ため

おかげで、あなたはそれを得るイベント宣言の一種類のみがあります、私は知らない...、イベントリスナーの一部の可視化を知っていますあなたを助けます:

// Can't get 
myDiv.attachEvent ("onclick", function() {alert (1)}); 

// Can't get 
myDiv.addEventListener ("click", function() {alert (1)}, false); 

// Can't get 
<div onclick = "alert (1)"></div> 

// Can get 
myDiv.onclick = function() {alert (1)} 

これはanswerのようにも見えます。とにかく私はあなたのための機能を作った:

<!DOCTYPE html> 

<html> 
    <head> 
     <script> 
      function getAllEvents() { 
       var all = document.getElementsByTagName ("*"); 
       var _return = ""; 

       for (var i = 0; i < all.length; i ++) { 
        for (var ii in all[i]) { 
         if (typeof all[i][ii] === "function" && /^on.+/.test (ii)) { // Unreliable 
          _return += all[i].nodeName + " -> " + ii + "\n"; 
         } 
        } 
       } 

       return _return; 
      } 

      document.addEventListener ("DOMContentLoaded", function() { 
       var div = this.getElementsByTagName ("div")[0]; 

       div.onclick = function() { 
        alert (1); 
       } 

       div.onmouseout = function() { 
        alert (2); 
       } 

       alert (getAllEvents()); 
      }, false); 
     </script> 

     <style> 
      div { 
       border: 1px solid black; 
       padding: 10px; 
      } 
     </style> 
    </head> 

    <body> 
     <div></div> 
    </body> 
</html> 
4

ビジュアルイベント(http://www.sprymedia.co.uk/article/Visual+Event+2)は非常に役に立ちます。このページに移動して、「ビジュアルイベント」リンクをブックマークバーにドラッグするだけです。ページを確認するには、ページをクリックしてから1秒待ってから、各要素のイベントがページにオーバーレイされます。

1

これを実現するスクリプトを作成しました。 2つのグローバル関数、hasEvent(Node elm, String event)getEvents(Node elm)を利用できます。 EventTargetプロトタイプメソッドadd/RemoveEventListenerが変更され、HTMLマークアップまたはJavaScriptの構文elm.on_event = ...によって追加されたイベントでは機能しません(add/RemoveEventListenerのみ)。

More info at GitHub

Live Demo

スクリプト:

var hasEvent,getEvents;!function(){function b(a,b,c){c?a.dataset.events+=","+b:a.dataset.events=a.dataset.events.replace(new RegExp(b),"")}function c(a,c){var d=EventTarget.prototype[a+"EventListener"];return function(a,e,f,g,h){this.dataset.events||(this.dataset.events="");var i=hasEvent(this,a);return c&&i||!c&&!i?(h&&h(),!1):(d.call(this,a,e,f),b(this,a,c),g&&g(),!0)}}hasEvent=function(a,b){var c=a.dataset.events;return c?new RegExp(b).test(c):!1},getEvents=function(a){return a.dataset.events.replace(/(^,+)|(,+$)/g,"").split(",").filter(function(a){return""!==a})},EventTarget.prototype.addEventListener=c("add",!0),EventTarget.prototype.removeEventListener=c("remove",!1)}(); 
関連する問題