2012-03-05 20 views
15

ईवेंट हैंडलर को ओवरराइड करने से कैसे बचें? मैं एक स्क्रिप्ट है a.jsखिड़की को रोकें। ओवरलोडेड जावास्क्रिप्ट

window.onload = function() { 
    //Handler in a.js 
} 

एक और स्क्रिप्ट का कहना है कि कहना b.js

window.onload = function() { 
    //Handler in b.js 
} 

जहां,

a.js मुझे

द्वारा बनाया गया 3 पार्टी पुस्तकालय की तरह है

बी.जे.एस. एक प्रकाशक है जो मेरी लिपि का उपयोग करता है [मैं यहां कोई बदलाव नहीं कर सकता]

बी.जे.एस. में ऑनलोड हैंडलर एजेड के हैंडलर को ओवरराइड करेगा?

यदि हां, तो इसे कैसे होने से रोकने के लिए?

ए.जे. में सभी ईवेंट हैंडलर की कतार का निर्माण करेगा और उन्हें ईवेंट सहायता पर डेक करेगा?

लेकिन क्या ए.जे. सभी घटनाओं के लिए सभी ईवेंट हैंडलर को बीएफएस लोड होने तक पहले से ही पता चल जाएगा?

विचार और संदर्भ नीचे स्तर के आईई संस्करणों में

उत्तर

8

उपयोग element.addEventListener या window.attachEvent में मदद मिलेगी।

नमूना addEvent विधि:

function addEvent(node, type, listener) { 
    if (node.addEventListener) { 
     node.addEventListener(type, listener, false); 
     return true; 
    } else if (node.attachEvent) { 
     node['e' + type + listener] = listener; 
     node[type + listener] = function() { 
      node['e' + type + listener](window.event); 
     } 
     node.attachEvent('on' + type, node[type + listener]); 
     return true; 
    } 
    return false; 
}; 

नोट - ज्यादातर, यदि सभी नहीं, jQuery और MooTools जैसे आधुनिक JavaScript लाइब्रेरी को अपने स्वयं के कार्यान्वयन की है। मैं उनके एपीआई का लाभ उठाने की सलाह देता हूं - क्योंकि वे अलग-अलग ब्राउज़र कार्यान्वयन को अलग करते हैं और पूरी तरह से परीक्षण किए जाते हैं।

+0

हमें नोड ['ई' + टाइप + श्रोता] क्यों चाहिए? Node.attachEvent ('+' प्रकार, श्रोता) पर काम नहीं करेगा? – Tamil

16

आप addEventListener() का उपयोग एक ही घटना

window.addEventListener("load", yourfunction, false); 
-1

हाँ, दूसरा बयान पहले एक स्थान पर आ जाएगी लिए विभिन्न संचालकों के लिए करना चाहिए। चूंकि आप पारंपरिक पंजीकरण मॉडल का उपयोग कर रहे हैं क्योंकि किसी दिए गए ईवेंट और ऑब्जेक्ट के लिए केवल एक ईवेंट हैंडल की अनुमति है। फ़ंक्शन असाइनमेंट संचयी नहीं है। लेकिन आप कर सकते हैं:

window.onload = function() {handlerinb(); handlerina()} 
संबंधित मुद्दे