जावास्क्रिप्ट में MSIE और addEventListener समस्या?


84
document.getElementById('container').addEventListener('copy',beforecopy,false );

Chrome / Safari में, ऊपर "beforecopy" फ़ंक्शन चलेगा जब पृष्ठ पर सामग्री की प्रतिलिपि बनाई जा रही है। MSIE इस कार्यक्षमता का समर्थन करने वाला है, लेकिन किसी कारण से मुझे यह त्रुटि मिल रही है:

"ऑब्जेक्ट इस संपत्ति या विधि का समर्थन नहीं करता है"

अब, यह मेरी समझ है कि इंटरनेट एक्सप्लोरर शरीर के नोड के साथ नहीं चलेगा, लेकिन मुझे लगा कि आईडी द्वारा एक नोड प्रदान करना ठीक काम करेगा। क्या किसी के पास कोई विचार है कि मैं क्या गलत कर रहा हूं? अग्रिम में धन्यवाद।

** किसी के लिए बोनस अंक जो मुझे बता सकते हैं कि तीसरा पैरामीटर "गलत" किसके लिए अच्छा है।


यहाँ एक अच्छा लेख है जो कैप्चर चरण और useCaptureबहुत अच्छी तरह से समझाता है
feeela

जवाबों:


185

IE में आपको attachEventमानक के बजाय उपयोग करना होगा addEventListener

एक सामान्य अभ्यास यह जांचना है कि क्या addEventListenerविधि उपलब्ध है और इसका उपयोग करें, अन्यथा उपयोग करें attachEvent:

if (el.addEventListener){
  el.addEventListener('click', modifyText, false); 
} else if (el.attachEvent){
  el.attachEvent('onclick', modifyText);
}

आप इसे करने के लिए एक फ़ंक्शन बना सकते हैं:

function bindEvent(el, eventName, eventHandler) {
  if (el.addEventListener){
    el.addEventListener(eventName, eventHandler, false); 
  } else if (el.attachEvent){
    el.attachEvent('on'+eventName, eventHandler);
  }
}
// ...
bindEvent(document.getElementById('myElement'), 'click', function () {
  alert('element clicked');
});

आप यहां ऊपर दिए गए कोड का एक उदाहरण चला सकते हैं

का तीसरा तर्क addEventListenerहै useCapture; यदि सही है, तो यह इंगित करता है कि उपयोगकर्ता ईवेंट कैप्चरिंग आरंभ करना चाहता है ।


1
मैं आपकी प्रतिक्रिया की सराहना करता हूं। मैंने बस कोशिश की कि आपने क्या पोस्ट किया, और यह काम किया। अब मुझे फेंकने वाली बात यह है कि "कॉपी" ईवेंट काम नहीं कर रहा है लेकिन "ऑनक्लिक" ईवेंट है। विशेष रूप से, यह अजीब है क्योंकि quirksmode बताता है कि यह काम करना चाहिए: quirksmode.org/dom/events/cutcopypaste.html कोई विचार?
मैट्रिअम

उस टिप्पणी को खरोंचें। मैंने बस अलग किया और कोशिश की कि आपने क्या भेजा है, और क्लिक को कॉपी करने के लिए काम करता है। एक बार फिर धन्यवाद।
मैट्रिअम

1
तब Microsoft का स्वयं का दस्तावेज़ क्यों दिखा रहा है addEventListener? msdn.microsoft.com/en-us/library/ie/cc197015(v=vs.85).aspx
wmarbut

1
@wmarbut addEventListener में जोड़ा गया था, मुझे विश्वास है, IE9। संलग्नक IE 11 में हटा दिया गया था। मूल प्रश्न 2009 से है। CMS ने IE 11 के साथ काम करना जारी रखा है जो सही, मजबूत तरीका प्रदान करता है
कॉलिन यंग

यह बताता है कि यह इंटरनेट पर क्यों काम करता है लेकिन मेरे लिए इंट्रानेट पर नहीं, क्योंकि मेरे पास इंट्रानेट साइटों के लिए मेरी सेटिंग संगतता मोड में सेट है।
रोजर पर्किंस

32

यदि आप JQuery 2.x का उपयोग कर रहे हैं तो कृपया निम्नलिखित में जोड़ें

<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge;" />
   </head>
   <body>
    ...
   </body>
</html>

इसने मेरे लिए काम किया।


4
IE संस्करण <= 8 चलाने वालों के लिए, यह समस्या को ठीक नहीं करेगा।
नवजानेर

5

जोड़ने का प्रयास करें

<meta http-equiv="X-UA-Compatible" content="IE=edge"> 

हेडिंग टैग खोलने के ठीक बाद


3
IE संस्करण <= 8 चलाने वालों के लिए, यह समस्या को ठीक नहीं करेगा।
नवजानेर

5

इंटरनेट एक्सप्लोरर (IE8 और निचला) समर्थन नहीं करता है addEventListener(...)। यह attachEventविधि का उपयोग करके अपना स्वयं का ईवेंट मॉडल है । आप इस तरह से कुछ कोड का उपयोग कर सकते हैं:

var element = document.getElementById('container');
if (document.addEventListener){
    element .addEventListener('copy', beforeCopy, false); 
} else if (el.attachEvent){
    element .attachEvent('oncopy', beforeCopy);
}

यद्यपि मैं आपके स्वयं के ईवेंट हैंडलिंग रैपर लिखने से बचने की सलाह देता हूं और इसके बजाय जावास्क्रिप्ट फ्रेमवर्क (जैसे jQuery , Dojo , MooTools , YUI , प्रोटोटाइप) का उपयोग करता हूं आदि) का उपयोग करें और अपने आप ही इसके लिए फिक्स बनाने से बचें।

वैसे, घटनाओं के W3C मॉडल में तीसरा तर्क बुदबुदाती और कैप्चरिंग घटनाओं के बीच अंतर के साथ है । लगभग हर परिस्थिति में आप ईवेंट को बबल के रूप में संभालना चाहेंगे, न कि जब वे कैप्चर किए जाते हैं। पाठ बक्सों के लिए "फ़ोकस" जैसी घटनाओं पर ईवेंट प्रतिनिधिमंडल का उपयोग करते समय यह उपयोगी है , जो बुलबुला नहीं है।


2

IE11 के रूप में, आपको उपयोग करने की आवश्यकता है addEventListenerattachEventनिकाला जाता है और एक त्रुटि फेंकता है।



0

<meta http-equiv="X-UA-Compatible" content="IE=9">IE9 + का उपयोग करते हुए , addEventListenerइस तरह के नाम में "चालू" को हटाकर समर्थन करता है :

 var btn1 = document.getElementById('btn1');
 btn1.addEventListener('mousedown', function() {
   console.log('mousedown');
 });

0

समस्या यह है कि IE में मानक addEventListenerविधि नहीं है । IE अपने स्वयं के उपयोग करता हैattachEvent जो बहुत अधिक समान है।

अंतरों की अच्छी व्याख्या, और तृतीय पैरामीटर के बारे में भी quirksmode पर पाया जा सकता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.