Bedenken Sie, dass bei der Ausführung der onclick () - Funktion nur Folgendes gilt:
%Vor%, wörtlich. Die OptionPar wird zu dem Zeitpunkt aufgelöst, an dem das Click-Ereignis ausgeführt wird, und zu diesem Zeitpunkt ist es wahrscheinlich der letzte Wert, den Sie ihm zugewiesen haben. Sie sollten es generell vermeiden, Variablen auf diese Weise zu übergeben.
Das Problem, das Sie zu lösen versuchen, wird am besten gelöst, indem Sie das Stück wie folgt neu schreiben:
%Vor%Lesen Sie für jquery den Abschnitt zum Hinzufügen von Ereignisdaten aus der API :
%Vor%Die angenommene Antwort scheint zu funktionieren, scheint aber verwirrend zu sein und eine etwas umständliche Art, dies zu tun. Ein besserer Weg wäre vielleicht, das Datenattribut für das Element zu verwenden, nach dem Sie den Ereignislistener suchen möchten. Es ist einfach, leicht zu verstehen und viel weniger Code. Hier ist ein Beispiel:
%Vor%Sie müssen so etwas tun:
%Vor%Die angenommene Antwort ist richtig, aber ich habe das Gefühl, dass keine wirkliche Erklärung gegeben wurde.
Lassen Sie mich versuchen zu erklären, das Problem hier ist klassische fehlende Schließung.
Die Variable 'i' wird um 1 pro Schleifeniteration erhöht, und das on-click-Ereignis wird tatsächlich nicht ausgeführt , unabhängig davon, ob es nur auf das a-Element angewendet wird, es fasst sich bis zur Länge von arrOptions zusammen, was 10 ist.
Also läuft die Schleife weiter bis 'i' 10 ist, Wenn dann das On-Click-Ereignis ausgelöst wird, nimmt es den Wert von i, der 10 ist.
jetzt, für die Lösung, In der Lösung verwenden wir eine Closure, so dass, wenn wir den Wert von 'i' auf das Ein-Klick-Ereignis des a-Elements anwenden, es tatsächlich den genauen Wert von i zur Zeit erhält.
Die innere Funktion des onclick-Ereignisses erzeugt eine Schließung, in der es auf den Parameter (arrOptions [i]) verweist, was bedeutet, dass die tatsächliche i-Variable zur richtigen Zeit ist.
Die Funktion schließt schließlich mit diesem Wert, und kann dann den entsprechenden Wert zurückgeben, wenn das On-Click-Ereignis ausgeführt wird.
Sie übergeben nur die Referenz der Variablen an die Funktion, nicht ihren Wert. Jedes Mal, wenn die Schleife iteriert wird, weist sie Ihrer anonymen Funktion einen Verweis zu und alle verweisen auf denselben Wert im Speicher. Da Sie jedoch denselben Variablennamen in der Schleife verwenden, überschreiben Sie den Wert der Variablen. Sie können die Variable mit einer Zeichenfolge verketten, um den Wert beizubehalten. Zum Beispiel so:
%Vor%Der erste Parameter ist der Name der Funktion, aber afaik ist optional (er kann leer gelassen oder weggelassen werden).
Ich füge einen Event-Handler an:
%Vor%kann alles aus dem Element abrufen, das das Ereignis ausgelöst hat:
%Vor%In diesem Fall müssen Sie die Option in das Element / Tag einbetten. In meinem Fall benutze ich die ID.
Bedenken Sie, dass bei der Ausführung der onclick () - Funktion nur Folgendes gilt:
%Vor%, wörtlich. Die OptionPar wird zu dem Zeitpunkt aufgelöst, an dem das Click-Ereignis ausgeführt wird, und zu diesem Zeitpunkt ist es wahrscheinlich der letzte Wert, den Sie ihm zugewiesen haben. Sie sollten es generell vermeiden, Variablen auf diese Weise zu übergeben.
Das Problem, das Sie zu lösen versuchen, wird am besten gelöst, indem Sie das Stück wie folgt neu schreiben:
%Vor%Die angenommene Antwort scheint zu funktionieren, scheint aber verwirrend zu sein und eine etwas umständliche Art, dies zu tun. Ein besserer Weg wäre vielleicht, das Datenattribut für das Element zu verwenden, nach dem Sie den Ereignislistener suchen möchten. Es ist einfach, leicht zu verstehen und viel weniger Code. Hier ist ein Beispiel:
%Vor%Die angenommene Antwort ist richtig, aber ich habe das Gefühl, dass keine wirkliche Erklärung gegeben wurde.
Lassen Sie mich versuchen zu erklären, das Problem hier ist klassische fehlende Schließung.
Die Variable 'i' wird um 1 pro Schleifeniteration erhöht, und das on-click-Ereignis wird tatsächlich nicht ausgeführt , unabhängig davon, ob es nur auf das a-Element angewendet wird, es fasst sich bis zur Länge von arrOptions zusammen, was 10 ist.
Also läuft die Schleife weiter bis 'i' 10 ist, Wenn dann das On-Click-Ereignis ausgelöst wird, nimmt es den Wert von i, der 10 ist.
jetzt, für die Lösung, In der Lösung verwenden wir eine Closure, so dass, wenn wir den Wert von 'i' auf das Ein-Klick-Ereignis des a-Elements anwenden, es tatsächlich den genauen Wert von i zur Zeit erhält.
Die innere Funktion des onclick-Ereignisses erzeugt eine Schließung, in der es auf den Parameter (arrOptions [i]) verweist, was bedeutet, dass die tatsächliche i-Variable zur richtigen Zeit ist.
Die Funktion schließt schließlich mit diesem Wert, und kann dann den entsprechenden Wert zurückgeben, wenn das On-Click-Ereignis ausgeführt wird.
Sie übergeben nur die Referenz der Variablen an die Funktion, nicht ihren Wert. Jedes Mal, wenn die Schleife iteriert wird, weist sie Ihrer anonymen Funktion einen Verweis zu und alle verweisen auf denselben Wert im Speicher. Da Sie jedoch denselben Variablennamen in der Schleife verwenden, überschreiben Sie den Wert der Variablen. Sie können die Variable mit einer Zeichenfolge verketten, um den Wert beizubehalten. Zum Beispiel so:
%Vor%Der erste Parameter ist der Name der Funktion, aber afaik ist optional (er kann leer gelassen oder weggelassen werden).
Tags und Links javascript html button events onclick