2011-03-14 11 views
7

मैं एक ऐसे तरीके की तलाश कर रहा हूं जहां मैं वेबसाइट पर सभी जेएस (या अन्य स्क्रिप्ट्स) के साथ बनाए गए सभी ईवेंट-श्रोता बाइंडिंग सूचीबद्ध कर सकता हूं। मुख्य रूप से मैं डबल बाइंडिंग (डीबग कारण के लिए) खोजना चाहता हूं, लेकिन मुझे लगता है कि इसके लिए अन्य मुद्दे भी हैं।जावास्क्रिप्ट में सभी ईवेंट-श्रोता बाइंडिंग प्राप्त करने का कोई तरीका है?

शानदार ब्राउज़र के लिए एक प्लगइन होगा, जहां आप वेबसाइट पर देख सकते हैं कि किस तत्व के ईवेंटलिस्टर्स बाध्य हैं। तुम्हें पता है, घटना-श्रोताओं में से कुछ दृश्य ... लिंक, स्क्रिप्ट के लिए

धन्यवाद और टिप्पणियों ;-)

+2

वहाँ jQuery के लिए कुछ इस तरह है। फायरबग के लिए यह एक विस्तार है जिसे इसे फायरक्वरी कहा जाता है: http://firequery.binaryage.com/ लेकिन मुझे नहीं पता कि यह मूल जावास्क्रिप्ट घटनाओं के लिए भी काम करता है या नहीं। – meo

+0

एचएम ... यह पहला कदम है ... शायद इसे इस्तेमाल करने के लिए समय चाहिए – 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

मैंने अभी एक स्क्रिप्ट लिखी है जो आपको इसे प्राप्त करने देती है। यह आपको दो वैश्विक कार्य देता है: hasEvent(Node elm, String event) और getEvents(Node elm) जिसका आप उपयोग कर सकते हैं। ध्यान रखें कि यह EventTarget प्रोटोटाइप विधि add/RemoveEventListener संशोधित करता है, और elm.on_event = ... के HTML मार्कअप या जावास्क्रिप्ट सिंटैक्स के माध्यम से जोड़े गए ईवेंट के लिए काम नहीं करता है, केवल 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)}(); 
संबंधित मुद्दे

 संबंधित मुद्दे