Ich versuche, das change
Ereignis in einem Textfeld auszulösen, wenn ich seinen Wert mit einer Schaltfläche ändere, aber es funktioniert nicht. Überprüfen Sie diese Geige .
Wenn Sie etwas in die Textfelder eingeben und auf eine andere Stelle klicken, change
wird dies ausgelöst. Wenn Sie jedoch auf die Schaltfläche klicken, wird der Textfeldwert geändert, jedoch change
nicht ausgelöst. Warum?
Antworten:
onchange
Wird nur ausgelöst, wenn der Benutzer die Eingabe eingibt und die Eingabe dann den Fokus verliert.Sie können das
onchange
Ereignis manuell aufrufen , indem Sie nach dem Festlegen des Werts Folgendes verwenden:Alternativ können Sie das Ereignis auslösen , indem Sie:
quelle
.change()
mit der.val()
Methode zu behandeln..val()
in ,.change()
weil sie die Eingabevalidierung tun. Triggerung.change()
auf.val()
würde zu einer Endlosschleife führen.blur
$('#mytext').focus().val('New text').blur();
Nach dem hervorragenden Vorschlag von redsquare funktioniert dies gut:
quelle
this
:return this.val(v).trigger("change");
Sie können die
val
Funktion zum Auslösen von Änderungen sehr einfach überschreiben, indem Sie sie durch einen Proxy zum Original ersetzenval
Funktion .Fügen Sie diesen Code einfach irgendwo in Ihr Dokument ein (nach dem Laden von jQuery).
Ein funktionierendes Beispiel: hier
(Beachten Sie, dass dies immer ausgelöst wird,
change
wennval(new_val)
es aufgerufen wird, auch wenn sich der Wert nicht tatsächlich geändert hat.)Wenn Sie eine Änderung NUR dann auslösen möchten, wenn sich der Wert tatsächlich geändert hat, verwenden Sie diesen:
Live-Beispiel dafür: http://jsfiddle.net/5fSmx/1/
quelle
.val()
..val()
geschrieben wurde, plötzlich Nebenwirkungen hervorrufen :-p.Sie müssen die Methode wie folgt verketten:
quelle
Nein, Sie müssen es möglicherweise manuell auslösen, nachdem Sie den Wert eingestellt haben:
oder:
quelle
Es sieht so aus, als ob die Ereignisse nicht sprudeln. Versuche dies:
Ich hoffe das hilft.
Ich habe nur ein einfaches altes versucht,
$("#mytext").trigger('change')
ohne den alten Wert zu speichern, und die.change
Brände, auch wenn sich der Wert nicht geändert hat. Deshalb habe ich den vorherigen Wert gespeichert und$("#mytext").trigger('change')
nur aufgerufen , wenn er sich ändert.quelle
Ab Februar 2019
.addEventListener()
funktioniert derzeit nicht mit jQuery.trigger()
oder.change()
Sie können es unten mit Chrome oder Firefox testen.Sie müssen
.dispatchEvent()
stattdessen verwenden.quelle
Von https://api.jquery.com/change/ :
Das
change
Ereignis wird an ein Element gesendet, wenn sich sein Wert ändert. Diese Veranstaltung ist auf<input>
Elemente,<textarea>
Felder und<select>
Elemente beschränkt. Bei Auswahlfeldern, Kontrollkästchen und Optionsfeldern wird das Ereignis sofort ausgelöst, wenn der Benutzer eine Auswahl mit der Maus trifft. Bei den anderen Elementtypen wird das Ereignis jedoch verschoben, bis das Element den Fokus verliert.quelle
Ich weiß, dass dies ein alter Thread ist, aber für andere, die suchen, sind die oben genannten Lösungen möglicherweise nicht so gut wie die folgenden, anstatt
change
Ereignisse zu überprüfen, überprüfen Sie dieinput
Ereignisse.quelle