2009-06-10 20 views
13

मैं एक जावास्क्रिप्ट समारोह है कि "onclick" कुछ HTML-नोड्स -event सेट मिल गया है - भले ही कि "onclick" -event से पहले स्थापित किया गया है।मैं कैसे जांच सकता हूं कि जावास्क्रिप्ट-इवेंटहालर सेट किया गया है या नहीं?

मैं कैसे जांच कर सकते हैं कि घटना पहले से ही स्थापित किया गया है, तो मैं जहां यह पहले से ही इनकार कर दिया गया केवल HTML-नोड्स पर घटना सेट करने के लिए मेरी समारोह का विस्तार कर सकते हैं?

उत्तर

8

चेक, इस तरह:

if(typeof someNode.onclick == "function") { 
    // someNode has an event handler already set for the onclick event... 
} 

वैसे, अगर आप किसी लाइब्रेरी का उपयोग कर रहे हैं, आप तो कहना चाहिए - अगर आप कर रहे हैं, यह आसान/क्लीनर हो सकता है और जो आप के पुस्तकालय के आधार पर अलग-अलग होता है

<script type="text/javascript"> 
    if (undefined == document.getElementById('foo').onclick) 
    { 
     // Add event handler 
    } 
</script> 
+0

को वर्ग को जोड़ने और, डेवलपर की तरह कुछ का उपयोग करता है: button.addEventListener ('क्लिक', buttonPressed, सच); मोज़िला में? –

+8

यह अटैचमेंट या addEventListener का उपयोग करके ईवेंट हैंडलर सेट के लिए काम नहीं करेगा। –

+0

मुझे इसके बारे में पता है, लेकिन चूंकि ओपी ने यह निर्दिष्ट नहीं किया कि वह चीजों को कैसे तारित कर रहा है, मैंने ऐसा करने की DOM 0 विधि मान ली। –

1
<input type="button" id="foo" name="foo" value="bar" /> 

<script type="text/javascript"> 
    alert(document.getElementById('foo').onclick); //undefined 
</script> 

तो क्या आप क्या करना चाहते कुछ इस तरह है

var myListOfAddedEvents = []; 

var realAddEventListener = HTMLElement.prototype.addEventListener; 

HTMLElement.prototype.addEventListener = function(evtType,fn,cap) { 
    myListOfAddedEvents.push(
     {on: this, type: evtType, handler: fn, capture: cap} 
    ); 

    return realAddEventListener.apply(this, arguments); 
}; 

नोट:: ईवेंट हैंडलर्स समारोह के लिए कॉल में अवरोध डालने के <element>.addEventListener() का उपयोग कर संलग्न कि अपरीक्षित कोड है और कुछ काम पड़ सकता है। मैं यह एक ही समारोह सभी तत्व प्रकार द्वारा उपयोग किया जाएगा उम्मीद कर रहा हूँ, लेकिन मैं गलत हो सकता है। इसके अलावा यह केवल आप से पहले कोड के इस बिट चला सकते हैं अगर वे घटनाओं जोड़ना शुरू काम करेंगे। AttachEvent के लिए एक प्रति इसी तरह बनाया जा सकता है।

+9

इस घटना संचालकों लिए काम नहीं करेगा attachEvent या addEventListener। –

+0

tHX का उपयोग कर सेट! पता नहीं था कि :) –

5

यह पता लगाने के लिए संभव हो जाना चाहिए: उपयोग कर रहे हैं ...

+0

आप जेसन गौरेया की तकनीक के साथ इस गठबंधन करने के लिए कर सकते हैं। क्योंकि ईवेंट हैंडलर को पंजीकृत करने के दो तरीके हैं, इसलिए उन्हें खोजने के लिए हमें दो अलग-अलग तकनीकों का उपयोग करने की आवश्यकता है! – joeytwiddle

-2

एक और विकल्प, तत्व

if(!elem.class.match('hasEvent')) 
{ 
    elem.addEventListener(event, function(){}); 
    elem.className = elem.className + ' hasEvent'; 
} 
संबंधित मुद्दे

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