2011-03-23 16 views
30

मेरे पास है:जावास्क्रिप्ट का उपयोग कर एक ही तत्व में एकाधिक ईवेंट श्रोताओं/हैंडलर जोड़े जा सकते हैं?

if (window.addEventListener) { 
    window.addEventListener('load',videoPlayer,false); 
} 
else if (window.attachEvent) { 
    window.attachEvent('onload',videoPlayer); 
} 

और फिर बाद में मेरे पास है:

if (window.addEventListener) { 
    window.addEventListener('load',somethingelse,false); 
} else if (window.attachEvent) { 
    window.attachEvent('onload',somethingelse); 
} 

यह पसंद किया/उन सब को एक साथ करने के लिए कार्यात्मक है?

if (window.addEventListener) { 
    window.addEventListener('load',videoPlayer,false); 
    window.addEventListener('load',somethingelse,false); 
} else if (window.attachEvent) { 
    window.attachEvent('onload',videoPlayer,false); 
    window.attachEvent('onload',somethingelse); 
} 
+0

मैं जानता हूँ कि यह jQuery के साथ संभव है। यदि आपके पास उपयोग करने का विकल्प है। –

उत्तर

32

की तरह आप यह करने के लिए कभी आप चाहते हैं कैसे कर सकते हैं। उन्हें एक साथ रहने की ज़रूरत नहीं है, यह कोड के संदर्भ पर निर्भर करता है। बेशक, यदि आप उन्हें एक साथ रख सकते हैं, तो आपको यह करना चाहिए, क्योंकि यह संभवतः आपके कोड की संरचना को और स्पष्ट करता है ("अब हम सभी ईवेंट हैंडलर जोड़ रहे हैं") के अर्थ में।

लेकिन कभी-कभी आपको ईवेंट श्रोताओं को गतिशील रूप से जोड़ना होता है। हालांकि, यह कई बार परीक्षण करने के लिए अनावश्यक है कि आप IE के साथ काम कर रहे हैं या नहीं।

इससे बेहतर होगा और पेज लोड होने पर विधि केवल तभी उपलब्ध होगी जब विधि उपलब्ध हो। कुछ इस तरह:

var addEventListener = (function() { 
    if(document.addEventListener) { 
     return function(element, event, handler) { 
      element.addEventListener(event, handler, false); 
     }; 
    } 
    else { 
     return function(element, event, handler) { 
      element.attachEvent('on' + event, handler); 
     }; 
    } 
}()); 

यह एक बार जो विधि का उपयोग करने का परीक्षण होगा। इस समारोह

addEventListener(window, 'load',videoPlayer); 
addEventListener(window, 'load',somethingelse); 
+0

क्यों कथित फ़ंक्शन-कॉल-तत्काल पैटर्न यहां? आसान नहीं होगा 'अगर (document.addEventListener) {addEventListener = ...} else {addEventListener = ...} '? – 6502

+1

बस शैली का मामला। मैं परीक्षण को आसपास के कोड से पूरी तरह से स्वतंत्र करता हूं और इस तरह इसे अपने स्वयं के "कंटेनर"/संदर्भ में रखना चाहता हूं। लेकिन आप सही हैं, इस मामले में यह जरूरी नहीं है। –

+0

बस स्पष्ट करने के लिए AttEvent पुराना है, आपको IE का उपयोग भी नहीं करना चाहिए :) मोबाइल लक्ष्यीकरण के लिए भी पता लगाने के बारे में चिंता न करें। –

5

मैं का उपयोग करें:: तो फिर आप के साथ अपनी स्क्रिप्ट भर की घटनाओं संलग्न कर सकते हैं

function addEvent (obj, type, fn) { 
    if (obj.addEventListener) { 

    obj.addEventListener(type, fn, false); 

    } else if (obj.attachEvent) { 

    obj.attachEvent('on' + type, function() { 

     return fn.call(obj, window.event); 

    }); 
    } 
} 
1
/** 
* multipleEventsListeners.js 
* Add the capability to attach multiple events to an element, just like jQuery does 
* https://gist.github.com/juanbrujo/a1f77db1e6f7cb17b42b 
*/ 

multipleEventsListeners(events, func, elem) { 
    elem = elem || document; 
    var event = events.split(' '); 
    for (var i = 0; i < event.length; i++) { 
    elem.addEventListener(event[i], func, false); 
    } 
} 

/* 
Use: 
var input = document.querySelector('input'); 
multipleEventsListeners(input, 'keyup change', function(e){ 
    console.log = this.value; 
}); 
*/ 

से: https://gist.github.com/juanbrujo/a1f77db1e6f7cb17b42b

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

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