document.getElementById('container').addEventListener('copy',beforecopy,false );
Dans Chrome / Safari, ce qui précède exécutera la fonction «avant la copie» lorsque le contenu de la page est copié. MSIE est également censé prendre en charge cette fonctionnalité, mais pour une raison quelconque, j'obtiens cette erreur:
"L'objet ne prend pas en charge cette propriété ou cette méthode"
Maintenant, je crois comprendre qu'Internet Explorer ne jouera pas avec le nœud du corps, mais j'aurais pensé que fournir un nœud par ID fonctionnerait bien. Quelqu'un a-t-il des idées sur ce que je fais mal? Merci d'avance.
** Des points bonus pour tous ceux qui peuvent me dire à quoi sert le 3ème paramètre "False".
useCapture
très bien: coding.smashingmagazine.com/2013/11/12Réponses:
Dans IE, vous devez utiliser
attachEvent
plutôt que la normeaddEventListener
.Une pratique courante consiste à vérifier si la
addEventListener
méthode est disponible et à l'utiliser, sinon utilisezattachEvent
:if (el.addEventListener){ el.addEventListener('click', modifyText, false); } else if (el.attachEvent){ el.attachEvent('onclick', modifyText); }
Vous pouvez créer une fonction pour le faire:
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'); });
Vous pouvez exécuter un exemple du code ci-dessus ici .
Le troisième argument de
addEventListener
estuseCapture
; si c'est vrai, cela indique que l'utilisateur souhaite lancer la capture d'événements .la source
addEventListener
alors? msdn.microsoft.com/en-us/library/ie/cc197015(v=vs.85).aspxSi vous utilisez JQuery 2.x, veuillez ajouter ce qui suit dans le
<html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge;" /> </head> <body> ... </body> </html>
Cela a fonctionné pour moi.
la source
essayez d'ajouter
<meta http-equiv="X-UA-Compatible" content="IE=edge">
juste après la balise de tête d'ouverture
la source
Internet Explorer (IE8 et inférieur) ne prend pas en charge
addEventListener(...)
. Il a son propre modèle d'événement en utilisant laattachEvent
méthode. Vous pouvez utiliser un code comme celui-ci:var element = document.getElementById('container'); if (document.addEventListener){ element .addEventListener('copy', beforeCopy, false); } else if (el.attachEvent){ element .attachEvent('oncopy', beforeCopy); }
Bien que je recommande d'éviter d'écrire votre propre wrapper de gestion d'événements et d'utiliser à la place un framework JavaScript (tel que jQuery , Dojo , MooTools , YUI , Prototype , etc.) et d'éviter d'avoir à créer le correctif pour cela vous-même.
Soit dit en passant, le troisième argument du modèle d'événements du W3C concerne la différence entre le bouillonnement et la capture d'événements . Dans presque toutes les situations, vous voudrez gérer les événements au fur et à mesure qu'ils bouillonnent, pas lorsqu'ils sont capturés. C'est utile lorsque vous utilisez la délégation d'événements sur des choses comme les événements de "focus" pour les zones de texte, qui ne font pas de bulles.
la source
À partir d'IE11, vous devez utiliser
addEventListener
.attachEvent
est obsolète et génère une erreur.la source
Comme PPK le souligne ici , dans IE, vous pouvez également utiliser
e.cancelBubble = true;
la source
En utilisant
<meta http-equiv="X-UA-Compatible" content="IE=9">
, IE9 + prend en chargeaddEventListener
en supprimant le "on" dans le nom de l'événement, comme ceci:var btn1 = document.getElementById('btn1'); btn1.addEventListener('mousedown', function() { console.log('mousedown'); });
la source
Le problème est que IE n'a pas la
addEventListener
méthode standard . IE utilise le sienattachEvent
qui fait à peu près la même chose.Une bonne explication des différences, ainsi que du 3ème paramètre peut être trouvée à quirksmode .
la source