60

क्या इंटरनेट एक्सप्लोरर 9 में तत्व वस्तु के बराबर है?addEventListener

if (!Element.prototype.addEventListener) { 
    Element.prototype.addEventListener = function() { .. } 
} 

यह इंटरनेट एक्सप्लोरर में कैसे काम करता है?

यदि addEventListener के बराबर कोई फ़ंक्शन है और मुझे नहीं पता, कृपया समझाएं।

किसी भी मदद की सराहना की जाएगी। समस्या को हल करने का एक पूरी तरह से अलग तरीका सुझाव देने के लिए स्वतंत्र महसूस करें।

+0

चाहे कोई ब्राउज़र अपने डीओएम ऑब्जेक्ट्स के लिए प्रोटोटाइप विरासत योजना लागू करता है, यह डब्लू 3 सी [इवेंट टाटा इंटरफेस] (http://www.w3.org/TR/DOM-Level-2-Events/events) का समर्थन करता है या नहीं। .html # घटनाक्रम-EventTarget-addEventListener)। यदि आप समर्थन के लिए परीक्षण करना चाहते हैं, तो इसे सीधे जांचें: 'अगर (element.addEventListener) {/ * समर्थित * /} अन्य {/ * समर्थित नहीं है * /} 'सभी ब्राउज़रों में प्रभावी है और कार्यान्वयन से स्वतंत्र है। – RobG

उत्तर

131

addEventListener ईवेंट हैंडलर्स संलग्न के लिए उपयोग करने के लिए उचित डोम विधि है।

इंटरनेट एक्सप्लोरर (संस्करण 8 तक) ने वैकल्पिक attachEvent विधि का उपयोग किया।

इंटरनेट एक्सप्लोरर 9 उचित addEventListener विधि का समर्थन करता है।

निम्नलिखित क्रॉस-ब्राउज़र addEvent फ़ंक्शन लिखने का प्रयास होना चाहिए।

function addEvent(evnt, elem, func) { 
    if (elem.addEventListener) // W3C DOM 
     elem.addEventListener(evnt,func,false); 
    else if (elem.attachEvent) { // IE DOM 
     elem.attachEvent("on"+evnt, func); 
    } 
    else { // No much to do 
     elem[evnt] = func; 
    } 
} 
+18

अंतिम स्थिति में "+" पर भी "" शामिल होना चाहिए। –

+69

IE9 और addEventListener के लिए आपको एक HTML5 pcunite

+1

@pcunite की इच्छा है कि मैं अधिक टिप्पणी करने वाले वोट को बढ़ा सकता हूं। बहुत महत्वपूर्ण बिंदु – Okeydoke

1

addEventListener संस्करण 9 के बाद से समर्थित है; पुराने संस्करणों के लिए कुछ हद तक समान attachEvent फ़ंक्शन का उपयोग करें।

2

रूप Delan कहा, तुम पुराने लोगों के लिए attachEvent नए संस्करणों के लिए addEventListener के संयोजन का उपयोग करना चाहते हैं, और।

आपको ईवेंट श्रोताओं के बारे में MDN पर अधिक जानकारी मिल जाएगी। (ध्यान दें कि आपके श्रोता में 'इस' के मूल्य के साथ कुछ चेतावनी हैं)।

आप इवेंट हैंडलिंग को सारणीबद्ध करने के लिए jQuery जैसे ढांचे का भी उपयोग कर सकते हैं।

$("#someelementid").bind("click", function (event) { 
    // etc... $(this) is whetver caused the event 
}); 
16

जॉन Resig, jQuery के लेखक, addEvent और removeEvent की क्रॉस-ब्राउज़र कार्यान्वयन के बारे में उनकी संस्करण प्रस्तुत के साथ संगतता समस्याओं को दरकिनार करने IE के अनुचित या न के बराबर addEventListener

function addEvent(obj, type, fn) { 
    if (obj.attachEvent) { 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn](window.event);} 
    obj.attachEvent('on'+type, obj[type+fn]); 
    } else 
    obj.addEventListener(type, fn, false); 
} 
function removeEvent(obj, type, fn) { 
    if (obj.detachEvent) { 
    obj.detachEvent('on'+type, obj[type+fn]); 
    obj[type+fn] = null; 
    } else 
    obj.removeEventListener(type, fn, false); 
} 

स्रोत: http://ejohn.org/projects/flexible-javascript-events/

+0

यह कोड इवेंट श्रोता जोड़ने के अलावा ओबीजे को कॉलबैक एफएन को बांधने का प्रयास करता है, लेकिन यह अनावश्यक है क्योंकि जेएस का उपयोग करने वाले हर किसी को पहले से ही इस बारे में पता होना चाहिए। –

+3

यदि आपने जॉन रेजिग को ** jQuery ** के लेखक के रूप में पेश किया था तो आपको अधिक वोट मिलेंगे। –

+0

अच्छा बिंदु, – jchook

13

मैं इस समाधान का उपयोग कर रहा है और IE8 में या अधिक से अधिक काम करता है।

if (typeof Element.prototype.addEventListener === 'undefined') { 
    Element.prototype.addEventListener = function (e, callback) { 
     e = 'on' + e; 
     return this.attachEvent(e, callback); 
    }; 
    } 

और फिर:

<button class="click-me">Say Hello</button> 

<script> 
    document.querySelectorAll('.click-me')[0].addEventListener('click', function() { 
    console.log('Hello'); 
    }); 
</script> 

यह दोनों IE8 और क्रोम, फायरफॉक्स, आदि काम करेंगे

+0

मुझे एलिमेंट के साथ समस्या है (प्रकार अपरिभाषित है) – zchpit

+0

अपने दस्तावेज़ प्रकार संस्करण की जांच करें, यह html5 doctype होना चाहिए – Teobaldo

1

संपादित

मैं एक टुकड़ा है कि EventListener इंटरफेस और IE8 एक अनुकरण लिखा था, यहां तक ​​कि सादे वस्तुओं पर प्रतिदेय है: https://github.com/antcolag/iEventListener/blob/master/iEventListener.js

पुराने उत्तर

इस अनुकरण addEventListener या के लिए एक रास्ता है ब्राउज़रों कि उन
में से एक का समर्थन नहीं करते पर attachEvent आशा में मदद मिलेगी

(function (w,d) { // 
    var 
     nc = "", nu = "", nr = "", t, 
     a = "addEventListener", 
     n = a in w, 
     c = (nc = "Event")+(n?(nc+= "", "Listener") : (nc+="Listener","")), 
     u = n?(nu = "attach", "add"):(nu = "add","attach"), 
     r = n?(nr = "detach","remove"):(nr = "remove","detach") 
/* 
* the evtf function, when invoked, return "attach" or "detach" "Event" functions if we are on a new browser, otherwise add "add" or "remove" "EventListener" 
*/ 
    function evtf(whoe){return function(evnt,func,capt){return this[whoe]((n?((t = evnt.split("on"))[1] || t[0]) : ("on"+evnt)),func, (!n && capt? (whoe.indexOf("detach") < 0 ? this.setCapture() : this.removeCapture()) : capt ))}} 
    w[nu + nc] = Element.prototype[nu + nc] = document[nu + nc] = evtf(u+c) // (add | attach)Event[Listener] 
    w[nr + nc] = Element.prototype[nr + nc] = document[nr + nc] = evtf(r+c) // (remove | detach)Event[Listener] 

})(window, document) 
1

यहाँ जो सुंदर कोड की तरह उन लोगों के लिए कुछ न कुछ है का प्रयोग करेंगे।

function addEventListener(obj,evt,func){ 
    if ('addEventListener' in window){ 
     obj.addEventListener(evt,func, false); 
    } else if ('attachEvent' in window){//IE 
     obj.attachEvent('on'+evt,func); 
    } 
} 

बेशर्मी Iframe-Resizer से चोरी हो।

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