Die Logik im change()
Ereignishandler wird nicht ausgeführt, wenn der Wert von festgelegt wird val()
, sondern ausgeführt, wenn der Benutzer mit der Maus einen Wert auswählt. Warum ist das?
<select id="single">
<option>Single</option>
<option>Single2</option>
</select>
<script>
$(function() {
$(":input#single").change(function() {
/* Logic here does not execute when val() is used */
});
});
$("#single").val("Single2");
</script>
Ich glaube, Sie können das Änderungsereignis manuell auslösen mit
trigger()
:Obwohl es nicht automatisch ausgelöst wird, habe ich keine Ahnung.
quelle
$('#foo').change(function() { $( this ).val( 'whatever' ); });
Das Hinzufügen dieses Codeteils nach val () scheint zu funktionieren:
quelle
$(":input#single")
. In der Tat sollten Sie wirklich nicht. Verketten Sie es einfach nach dem.val()
. Sie können.trigger('change')
oder verwenden.change()
. Sie sind genau gleich.Soweit ich APIs einlesen kann. Das Ereignis wird nur ausgelöst, wenn der Benutzer auf eine Option klickt.
http://api.jquery.com/change/
quelle
input
Elemente ausgelöst wird, nicht wenn das Element den Fokus verliert. Wissen Sie?Fügen Sie zur Vereinfachung eine benutzerdefinierte Funktion hinzu und rufen Sie sie auf, wann immer Sie möchten, dass eine Änderung des Werts auch eine Änderung auslöst
und
Oder Sie können die val-Funktion überschreiben, um die Änderung immer aufzurufen, wenn der val aufgerufen wird
Beispiel unter http://jsfiddle.net/r60bfkub/
quelle
change
warten auf das Ereignis -event über ein Steuerelement und führen einen Rückruf aus, der (direkt oder indirekt) daschange
Ereignis -event über dasselbe Steuerelement erneut auslöst . Ich empfehle Ihnen, einen anderen Namen für das Ereignis zu verwenden, das Sie manuell auslösen (z. B.explicit.change
), damit das Ereignis nicht erneut ausgelöstchange
wird, die Schleife verhindert wird und Sie dennoch auf das Ereignis reagieren können.Falls Sie nicht mit dem Standardänderungsereignis verwechseln möchten, können Sie Ihr benutzerdefiniertes Ereignis angeben
Sie können Folgendes tun, um das Ereignis bei einem festgelegten Wert auszulösen
quelle
Ich bin bei der Verwendung von CMB2 mit Wordpress auf dasselbe Problem gestoßen und wollte mich in das Änderungsereignis einer Metabox zum Hochladen von Dateien einbinden.
Falls Sie den Code, der die Änderung aufruft, nicht ändern können (in diesem Fall das CMB2-Skript), verwenden Sie den folgenden Code. Der Trigger wird aufgerufen, nachdem der Wert festgelegt wurde. Andernfalls funktioniert Ihr Änderungsereignishandler, aber der Wert ist der vorherige und nicht der festgelegte.
Hier ist der Code, den ich benutze:
quelle
this.selector
in der überschreibenden$.fn.val
Funktion nach einem bestimmten Selektor suchen (hängt davon ab, was für den Selektor verwendet wird). Dies ist das Beste, was ich gefunden habe, um dies nur für bestimmte Felder zu tun. Das einzige Problem ist, dass Sie wissen müssen, was sie für den Selektor verwendenDies funktionierte für mein Skript. Ich habe 3 Combos und binde mit dem chainSelect-Ereignis. Ich muss 3 Werte per URL übergeben und standardmäßig alle Dropdown-Listen auswählen. Ich habe das benutzt
Und die erste Veranstaltung hat funktioniert.
quelle
Wenn Sie gerade die Auswahloption zu einem Formular hinzugefügt haben und das Änderungsereignis auslösen möchten, ist ein setTimeout erforderlich, andernfalls greift jQuery das neu hinzugefügte Auswahlfeld nicht auf:
quelle