सवाल जावास्क्रिप्ट में एमएसआईई और addEventListener समस्या?


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

क्रोम / सफारी में, उपर्युक्त "प्रीकोपी" फ़ंक्शन चलाएगा जब पृष्ठ पर सामग्री की प्रतिलिपि बनाई जा रही है। एमएसआईई को इस कार्यक्षमता का भी समर्थन करना चाहिए, लेकिन किसी कारण से मुझे यह त्रुटि मिल रही है:

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

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

** किसी भी व्यक्ति के लिए बोनस पॉइंट जो मुझे बता सकता है कि तीसरा पैरामीटर "गलत" क्या है।


76
2017-11-08 04:35


मूल


यहां एक अच्छा लेख है जो कैप्चर चरण और बताता है useCapture बहुत अच्छा: coding.smashingmagazine.com/2013/11/12/... - feeela


जवाब:


आईई में आपको उपयोग करना होगा 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; यदि सही है, तो यह इंगित करता है कि उपयोगकर्ता शुरू करना चाहता है घटना कैप्चरिंग


175
2017-11-08 04:40



मैं आपकी प्रतिक्रिया की सराहना करता हूं। मैंने बस आपके द्वारा पोस्ट की गई कोशिश की, और यह काम किया। जो चीज मुझे अब फेंक रही है वह यह है कि "प्रतिलिपि" घटना काम नहीं कर रही है लेकिन "ऑनक्लिक" घटना है। विशेष रूप से, यह अजीब बात है क्योंकि quirksmode बताता है कि यह काम करना चाहिए: quirksmode.org/dom/events/cutcopypaste.htmlकोई विचार? - Matrym
उस टिप्पणी को स्क्रैच करें। मैंने बस अलग किया और आपके द्वारा भेजे गए प्रयासों की कोशिश की, और प्रतिलिपि पर क्लिक करने के लिए क्लिक करना काम करता है। एक बार फिर धन्यवाद। - Matrym
आपका स्वागत है! - CMS
आपने अभी मेरी सैनिटी, सीएमएस बचाई है। शुक्रिया शुक्रिया! - CodeMouse92
माइक्रोसॉफ्ट के अपने दस्तावेज का उपयोग क्यों दिखाता है addEventListener फिर? msdn.microsoft.com/en-us/library/ie/cc197015(v=vs.85).aspx - wmarbut


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

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

यह मेरे लिए काम किया।


28
2017-08-19 15:05



उन लोगों के लिए जो IE संस्करण <= 8 चलाते हैं, यह समस्या को ठीक नहीं करेगा। - ninjaneer


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

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

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

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


4
2017-11-08 04:45





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

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

उद्घाटन हेड टैग के ठीक बाद


3
2017-08-19 07:55



उन लोगों के लिए जो IE संस्करण <= 8 चलाते हैं, यह समस्या को ठीक नहीं करेगा। - ninjaneer


आईई 11 के रूप में, आपको उपयोग करने की आवश्यकता है addEventListenerattachEvent बहिष्कृत किया गया है और एक त्रुटि फेंकता है।


1
2017-11-19 09:32



यदि आप x-ua-compatible मेटाटैग डालें तो क्या आप इसका उपयोग कर सकते हैं? - Vincent


जैसा कि पीपीके बताता है यहाँ, आईई में आप भी उपयोग कर सकते हैं

e.cancelBubble = true;

0
2017-10-10 13:47





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

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

0
2017-11-16 21:44





समस्या यह है कि आईई के पास मानक नहीं है addEventListener तरीका। आईई अपने आप का उपयोग करता है attachEvent जो काफी वही करता है।

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


0
2017-11-08 04:41