Ajouter des écouteurs d'événement à plusieurs éléments
J'ai eu du mal avec ce pour un bon couple d'heures maintenant.
Je veux ajouter un écouteur d'événement pour tous les <select>
s sur une page et j'ai ce bout de code pour l'instant:
onload = function(e) {
sels = document.getElementsByTagName('select');
for(i=0; i<sels.length; i++) {
sels[i].addEventListener('change', alert('test!'), false);
}
}
Cela ne déclenche l'alerte lorsque la page est chargée et pas lorsque je change la valeur dans l'une de mes <select>
s.
Puis-je obtenir un coup de pouce dans la bonne direction, s'il vous plaît? 🙂
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'avoir leur fonction anonyme pour ce que vous appelez
alert()
fonction immédiatement dans votre exemple:Pour l'instant en fonction de votre code
addEventListener
tente d'ajouter le résultat deundefined
(retour dealert()
fonction).Ou vous pouvez simplement passer à la fonction de gestionnaire pour qu':
Remarque: en faisant
somefunction(arg[, arg...])
vous appeler en référence non pas à la fonction, mais à ce que la fonction renvoie.Côté de emballage de la
alert
dans une fonction, comme mentionné avant, ne pas utiliser degetElementsByTagName
pour chaque itération de la boucle:Vous avez la liste des
select
éléments enregistrés à une variable, il n'est pas nécessaire, pour ne pas mentionner inefficace deget
tous ces éléments, à chaque itération de boucle.getElementsByClassName()
. Ce qui devrait être un peu plus vite.J'ai créé la fonction suivante, qui itère sur tous les éléments qui correspondent à la
selector
, et ajouter un écouteur d'événement pour laevent
avec le passéhandler
.C'est une fonctionnalité similaire pour jQuery
$(selector).on(event, handler)
Donc pour l'OP de la manière d'utiliser cette fonction afin de:
Voir aussi ma réponse pour Écouteur d'événement pour les actuels et futurs des éléments
Vous êtes l'exécution de la fonction alert() immédiatement, vous devez passer à la méthode addEventListener fonction une fonction à la place, donc:
De remontée d'événements est le concept le plus important en javascript, donc si vous pouvez ajouter un événement sur les DOM directement, vous pouvez enregistrer quelques lignes de code :