MSIE e addEventListener Problema in Javascript?

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

In Chrome / Safari, quanto sopra eseguirà la funzione “beforecopy” quando il contenuto della pagina viene copiato. MSIE dovrebbe supportare anche questa funzionalità, ma per qualche motivo ho ricevuto questo errore:

“L’object non supporta questa proprietà o metodo”

Ora, è a mia conoscenza che Internet Explorer non giocherà con il nodo del corpo, ma avrei pensato che fornire un nodo tramite ID funzionasse correttamente. Qualcuno ha qualche idea su cosa sto facendo male? Grazie in anticipo.

** Punti bonus per chiunque possa dirmi che cosa è buono per il terzo parametro “False”.

In IE devi usare attachEvent piuttosto che addEventListener standard.

Una pratica comune è verificare se il metodo addEventListener è disponibile e utilizzarlo, altrimenti utilizzare attachEvent :

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

Puoi fare una funzione per farlo:

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

È ansible eseguire un esempio del codice sopra qui .

Il terzo argomento di addEventListener è useCapture ; se è vero, indica che l’utente desidera avviare la cattura degli eventi .

Nel caso in cui si utilizzi JQuery 2.x, si prega di aggiungere quanto segue in

      ...   

Questo ha funzionato per me.

Internet Explorer (IE8 e versioni precedenti) non supporta addEventListener(...) . Ha un proprio modello di eventi che utilizza il metodo attachEvent . Potresti usare un codice come questo:

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

Anche se consiglio di evitare di scrivere il proprio wrapper per la gestione degli eventi e utilizzare invece un framework JavaScript (come jQuery , Dojo , MooTools , YUI , Prototype , ecc.) Ed evitare di dover creare la correzione per questo da soli.

A proposito, il terzo argomento del modello di eventi W3C ha a che fare con la differenza tra eventi di bubbling e di cattura . In quasi tutte le situazioni dovrai gestire gli eventi mentre bolle, non quando vengono catturati. È utile quando si utilizza la delega degli eventi su eventi come “focus” per le caselle di testo, che non creano bolle.

prova ad aggiungere

  

subito dopo il tag head di apertura

A partire da IE11, è necessario utilizzare addEventListener . attachEvent è deprecato e genera un errore.

Come fa notare PPK qui , in IE puoi anche usare

 e.cancelBubble = true; 

Usando , IE9 + supporta addEventListener rimuovendo “on” nel nome dell’evento, in questo modo:

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

Il problema è che IE non ha il addEventListener standard addEventListener . IE usa il proprio attachEvent che fa praticamente la stessa cosa.

Una buona spiegazione delle differenze e anche del terzo parametro possono essere trovate in quirksmode .