document.getElementById('container').addEventListener('copy',beforecopy,false );
Dans Chrome/Safari, ce qui précède exécute la fonction "beforecopy" lors de la copie du contenu de la page. MSIE est supposé prendre en charge cette fonctionnalité également, mais pour une raison quelconque, j'obtiens cette erreur:
"L'objet ne prend pas en charge cette propriété ou cette méthode"
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 correctement. Est-ce que quelqu'un a des idées sur ce que je fais mal? Merci d'avance.
** Points bonus pour tous ceux qui peuvent me dire à quoi sert le troisième paramètre "Faux".
Dans IE, vous devez utiliser attachEvent
plutôt que le standard addEventListener
.
Une pratique courante consiste à vérifier si la méthode addEventListener
est disponible et à l'utiliser, sinon utilisez attachEvent
:
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
est useCapture
; Si la valeur est true, cela indique que l'utilisateur souhaite lancer la capture d'événement .
Si vous utilisez JQuery 2.x, veuillez ajouter les éléments suivants dans le
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge;" />
</head>
<body>
...
</body>
</html>
Cela a fonctionné pour moi.
Internet Explorer (IE8 et inférieur) ne prend pas en charge addEventListener(...)
. Il a son propre modèle d'événement utilisant la méthode attachEvent
. Vous pourriez 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 plutôt un framework JavaScript (tel que jQuery , Dojo , MooTools , YUI , Prototype , etc.) et évitez de créer vous-même le correctif.
Soit dit en passant, le troisième argument du modèle d'événements du W3C a trait à la différence entre les événements bouillonnants et les événements capturés . Dans presque toutes les situations, vous voudrez gérer les événements lors de la formation de bulles, et non lors de leur capture. C'est utile lorsque vous utilisez délégation des événements sur des éléments tels que les événements "focus" pour les zones de texte, qui ne sont pas masquées.
essayez d'ajouter
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
juste après l'étiquette de tête d'ouverture
A partir de IE11, vous devez utiliser addEventListener
. attachEvent
est obsolète et génère une erreur.
Le problème est que IE ne possède pas la méthode addEventListener
standard. IE utilise sa propre variable attachEvent
, qui a sensiblement la même fonction.
On peut trouver une bonne explication des différences et du troisième paramètre at quirksmode .
Comme le souligne PPK ici , dans IE, vous pouvez également utiliser
e.cancelBubble = true;
En utilisant <meta http-equiv="X-UA-Compatible" content="IE=9">
, IE9 + prend en charge addEventListener
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');
});