J'ai créé une case à cocher de manière dynamique. J'avais l'habitude addEventListener
d'appeler une fonction en cliquant sur la case à cocher, qui fonctionne dans Google Chrome et Firefox mais ne fonctionne pas dans Internet Explorer 8 . Voici mon code:
var _checkbox = document.createElement("input");
_checkbox.addEventListener("click", setCheckedValues, false);
setCheckedValues
est mon gestionnaire d'événements.
Vous devez utiliser
attachEvent
dans les versions IE antérieures à IE9. Détectez siaddEventListener
est défini et utilisezattachEvent
si ce n'est pas le cas:Notez que IE11 supprimera
attachEvent
.Voir également:
element.addEventListener
Legacy Internet Explorer et attachEventla source
C'est aussi une solution de crossbrowser simple:
Au lieu de «clic» peut être n'importe quel événement bien sûr.
la source
addEventListener
Le troisième argument de est de toute façon facultatif, donc cela peut être une bonne solution, et c'est plus agréable que les branches if-else. Mais dans ce cas,_checkbox
est l'élément cible, nonwindow
. :) Vous pourriez peut-être créer une fonction où la cible de l'événement est un autre argument.addEventListener
appels des éléments de la cible d'événement - voir ce sujet: stackoverflow.com/questions/1007340/… . Donc, pour l'window
objet, cela fonctionne correctement, mais ne fonctionne pas pour les autres nœuds à l'intérieur du document. De cette façon, votre aliasing suggéré n'est PAS correct pour le cas mentionné dans la question d'origine! Quelle serait votre solution de contournement?IE ne prend pas en charge
addEventListener
jusqu'à la version 9, vous devez donc utiliserattachEvent
, voici un exemple:la source
Peut-être que c'est plus facile (et a plus de performances) si vous déléguez la gestion des événements à un autre élément, par exemple votre table
de cette façon, vous n'aurez qu'un seul gestionnaire d'événements, et cela fonctionnera également pour les éléments nouvellement ajoutés. Cela nécessite jQuery> = 1.7
Sinon, utilisez delegate ()
la source
Vous pouvez utiliser la fonction addEvent () ci-dessous pour ajouter des événements pour la plupart des choses, mais notez que pour XMLHttpRequest
if (el.attachEvent)
échouera dans IE8, car il ne prend pas en chargeXMLHttpRequest.attachEvent()
, vous devez donc l'utiliser à laXMLHttpRequest.onload = function() {}
place.la source
J'ai opté pour un Polyfill rapide basé sur les réponses ci-dessus:
Bien sûr, comme les réponses ci-dessus, cela ne garantit pas qu'il
window.attachEvent
existe, ce qui peut ou non être un problème.la source
Si vous utilisez jQuery, vous pouvez écrire:
la source
la source