2012-05-17 7 views
5

Je suis sur le point de mettre à jour mon code pour utiliser addEventListener() plutôt que d'écrire dans la propriété element de javascript. Avant de faire cela, je voulais vérifier quelques éléments.Comment mettre à jour addEventListener?

1.) Je suppose que je n'ai pas besoin d'appeler removeEventListener(), si je mets à jour le DOM et supprime les éléments (par .innerHTML write).

2.) addEventListener est pris en charge sur les navigateurs modernes populaires - IE9, Chrome, Firefox, Safari

3.) Il n'y a pas d'autres questions qui pourraient arrise sur les navigateurs modernes.

Je demande b.c. Je ne veux pas sauter le flingue en mettant à jour mon code.

Notes:

propriété de corrélations d'événements (supprimer le sur).

  • onkeypress - keypress
  • onblur -> flou
  • onfocus -> focus

recherche

https://developer.mozilla.org/en/DOM/element.addEventListener (compatibilité graphique A)

http://www.quirksmode.org/js/events_advanced.html

connexes

JavaScript listener, "keypress" doesn't detect backspace?

Remarques

  • au lieu de retourner faux. Utilisez preventDefault() pour empêcher l'envoi de formulaires lors de la saisie.
+0

vos hypothèses sont correctes ... allez-y ... btw, stocker une copie du fichier en cours dans le cas où vous n'êtes pas! –

+0

Très bien ... s'il y a des problèmes ... Je les posterai ici. –

+0

@ CS_2013 Pour 'addEventListener', il s'agit de la touche. En outre, vous pouvez utiliser jQuery pour créer des éléments inter-navigateur. Sous le capot, il utilise 'addEventListener' si possible, peut revenir à' attachEvent' pour IE plus ancien et normalise aussi votre objet événement, donc vous n'avez pas à vous soucier des différences. – kapa

Répondre

3
  1. Vous n'avez pas. Si vous ne stockez pas de références à l'élément DOM (dans des variables globales accidentelles par exemple), le garbage collector doit le nettoyer.

  2. C'est la prise en charge du navigateur. Pour les IE plus anciens, il ya attachEvent() qui fait presque le même.

  3. Rien de ce qui devrait vous inquiéter. C'est la façon moderne d'aller.

Note: vous pouvez utiliser jQuery pour faire cross-browser choses. Sous le capot, il utilise addEventListener si possible, peut revenir à attachEvent pour IE plus âgés et aussi normalizes your event object, de sorte que vous n'avez pas à vous soucier des différences. Il est également idéal pour la manipulation et la traversée de DOM.

+0

Je n'utilise pas de globales ... donc je suis bon là-bas. –

4

1) Vous n'avez pas besoin d'appeler removeEventListener pour cette question, mais vous aurez besoin d'appeler removeEventListener si vous supprimez l'élément DOM attaché au eventListener via addEventListener, si vous supprimez l'un de ses enfants que vous don Pas besoin d'enlever quoi que ce soit.

2) addEventListener est pris en charge sur tous les principaux navigateurs

3) Il n'y a pas d'autres questions sur les navigateurs modernes liés à addEventListener

4) onkeypress est pas le nom d'un événement, mais un attribut, l'événement le nom est une touche.Idem pour les autres noms * aussi bien

Un code rapide pour éviter jQuery pour la compatibilité cross-browser:

Element.prototype.on = function(evt, fn) { 
if (this.addEventListener) 
    this.addEventListener(evt, fn, false); 
else if (this.attachEvent) 
    this.attachEvent('on' + evt, fn); 
}; 

Element.prototype.off = function(evt, fn) { 
    if (this.removeEventListener) 
     this.removeEventListener(evt, fn, false); 
    else if (this.detachEvent) 
     this.detachEvent('on' + evt, fn); 
}; 
+0

bon code propre ... devrais-je soutenir les navigateurs plus anciens je vais inclure ceci ... –