Hinzufügen von Ereignis-Listenern auf mehrere Elemente
Ich ve wurde kämpfen mit diesem für eine gute paar Stunden jetzt.
Ich möchte hinzufügen eines Ereignis-Listeners für alle <select>
s auf einer Seite und ich habe dieses Stück code so weit:
onload = function(e) {
sels = document.getElementsByTagName('select');
for(i=0; i<sels.length; i++) {
sels[i].addEventListener('change', alert('test!'), false);
}
}
Diese nur von dem der Alarm ausgelöst, wenn die Seite geladen wird und nicht, wenn ich den Wert ändern, der in jedem meiner <select>
s.
Bekomme ich einen Schubs in die richtige Richtung, bitte? 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie haben es anonyme Funktion, die Sie aufrufen
alert()
Funktion sofort in deinem Beispiel:Jetzt nach deinem code
addEventListener
versucht, hinzufügen von Ergebnisundefined
(return ofalert()
- Funktion).Oder Sie können nur pass-Funktion handler für das:
Hinweis: durch
somefunction(arg[, arg...])
rufen Sie verweisen nicht auf Funktion, sondern auf das, was die Funktion zurückgibt.Abgesehen von der Umhüllung der
alert
in einer Funktion, die, wie bereits erwähnt, nicht mitgetElementsByTagName
für jede iteration der Schleife:Haben Sie die Liste der
select
Elemente gespeichert werden, um eine variable, es ist nicht notwendig, nicht zu erwähnen, ineffizient zuget
alle diese Elemente, jeder loop-iteration.getElementsByClassName()
. Die sollte ein wenig schneller.Habe ich die folgende einfache Funktion, die iteriert über alle Elemente, die mit der
selector
, und fügen Sie einen Ereignis-listener für dieevent
mit der übergebenenhandler
.Dies ist eine ähnliche Funktionalität für jQuery
$(selector).on(event, handler)
Also für die OP die Möglichkeit zur Verwendung dieser Funktion wäre etwa so:
Siehe auch meine Antwort für Ereignis-listener für den aktuellen und zukünftigen Elemente
Ausführung der alert () - Funktion sofort, Sie müssen übergeben Sie die addEventListener () - Funktion eine Funktion statt, so:
Ereignis-Bubbling ist das wichtige Konzept in javascript, also, wenn Sie hinzufügen können, Veranstaltung am DOM-direkt, Sie können sparen Sie einige Zeilen code :