Soru Javascript MSIE ve addEventListener Sorunu?


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

Chrome / Safari'de, sayfadaki içerik kopyalandığında yukarıdaki "önbelleğe alma" işlevini çalıştırır. MSIE'nin bu işlevselliği de desteklemesi gerekiyor, ancak bazı nedenlerle bu hatayı alıyorum:

"Nesne bu özelliği veya yöntemi desteklemiyor"

Şimdi, Internet Explorer'ın gövde düğümü ile oynamaması benim anlayışımdı, ancak ID ile bir düğüm sağlamanın iyi olacağını düşündüm. Yanlış yaptığım şey hakkında bir fikri olan var mı? Şimdiden teşekkürler.

** 3. parametre "False" ın ne için iyi olduğunu söyleyen herkes için bonus puanları.


76
2017-11-08 04:35


Menşei


İşte yakalama aşamasını açıklayan iyi bir makale ve useCapture çok iyi: coding.smashingmagazine.com/2013/11/12/... - feeela


Cevaplar:


IE'de kullanmak zorundasınız attachEvent standarttan ziyade addEventListener.

Yaygın bir uygulama olup olmadığını kontrol etmektir addEventListener yöntem kullanılabilir ve onu kullanın, aksi halde kullanın attachEvent:

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

Bunu yapmak için bir işlev yapabilirsiniz:

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');
});

Yukarıdaki kodun bir örneğini çalıştırabilirsiniz İşte.

Üçüncü argüman addEventListener olduğu useCapture; eğer doğruysa, kullanıcının başlatmak istediğini gösterir. olay yakalama.


175
2017-11-08 04:40



Cevabını takdir ediyorum. Ne yazdığını denedim ve işe yaradı. Şimdi beni fırlattıran şey "kopya" olayının çalışmadığı, ancak "onclick" olayının olduğu. Özellikle, bu garip çünkü quirksmode çalışması gerektiğini belirtiyor: quirksmode.org/dom/events/cutcopypaste.htmlHerhangi bir fikir? - Matrym
Bu yorumu kazıyın. Gönderdiğim şeyi sadece izole ettim ve denedim, ve tıklatarak kopyala çalışmak işe yarıyor. Tekrar teşekkürler. - Matrym
Rica ederim! - CMS
Aklımı kurtardın, CMS. Teşekkür ederim teşekkür ederim! - CodeMouse92
microsoft'un kendi dokümantasyonu neden kullanıldığını gösteriyor addEventListener sonra? msdn.microsoft.com/en-us/library/ie/cc197015(v=vs.85).aspx - wmarbut


JQuery 2.x kullanıyorsanız, lütfen aşağıdakileri ekleyin:

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

Bu benim için çalıştı.


28
2017-08-19 15:05



IE sürümleri <= 8'i çalıştıranlar için, bu sorunu çözmeyecektir. - ninjaneer


Internet Explorer (IE8 ve daha düşük) desteklemiyor addEventListener(...). Kullanarak kendi etkinlik modeline sahiptir. attachEvent yöntem. Böyle bir kod kullanabilirsiniz:

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

Her ne kadar kendi olay işleme sarmalayıcınızı yazmayı bırakmamaya ve bunun yerine bir JavaScript çerçevesi kullanmamaya dikkat edin. jQuery, Dojo, mooTools, YUI, Prototip, vb) ve bunun için düzeltmeyi kendiniz oluşturmaktan kaçının.

Bu arada, W3C modelindeki üçüncü argüman, köpürme ve olayları yakalama arasındaki fark. Neredeyse her durumda, olayları ele geçirdiklerinde değil, balonlandıklarında ele almak isteyeceksiniz. Kullanırken kullanışlıdır olay heyeti Metin kutuları için "focus" gibi şeyler üzerinde kabarcıklar olmayan şeyler.


4
2017-11-08 04:45





eklemeye çalış

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

açılış başlığı etiketinin hemen ardından


3
2017-08-19 07:55



IE sürümleri <= 8'i çalıştıranlar için, bu sorunu çözmeyecektir. - ninjaneer


IE11'den itibaren kullanmanız gerekiyor addEventListener. attachEvent kullanımdan kaldırılmış ve bir hata atıyor.


1
2017-11-19 09:32



X-ua uyumlu meta etiket eklerseniz kullanmaya devam edebilir misiniz? - Vincent


PPK'nın işaret ettiği gibi İşte, IE de kullanabilirsiniz

e.cancelBubble = true;

0
2017-10-10 13:47





kullanma <meta http-equiv="X-UA-Compatible" content="IE=9">, IE9 + destekliyor addEventListener Etkinlik adındaki "açık" ı kaldırmak gibi:

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

0
2017-11-16 21:44





Sorun, IE'nin standarda sahip olmamasıdır. addEventListener yöntem. IE kendi kullanır attachEvent hemen hemen aynı şeyi yapar.

Farklılıkların iyi bir açıklaması ve ayrıca 3. parametre hakkında bilgi bulunabilir. quirksmode şirketinde.


0
2017-11-08 04:41