Wie kann ich einen Code ausführen, sobald ein Formular zurückgesetzt wurde?Code ausführen, sobald das Formular zurückgesetzt wurde
Die reset
Ereignis ausgelöst wird vor die Formularfelder auf die Standardwerte zurückgesetzt erhalten. So zum Beispiel:
$('form').on('reset', function(e) {
$('input').val('a value that should be set after the form has been reset');
});
Das wird nicht funktionieren. (Demo)
Da die reset
Ereignis ausgelöst wird, bevor der Browser das Standardformular Reset Verhalten behandelt, setzt der Code oben einfach die Eingabe des value
direkt vor die Standardaktion der reset
Ereignis stattfindet, die Wiederherstellung der Wert des Eingangs auf den Standardwert. Dies ist sinnvoll, da ich e.preventDefault()
anrufen könnte, um das Zurücksetzen des Formulars abzubrechen.
Mein Anwendungsfall erfordert die Ausführung von Code, sobald das Formular zurückgesetzt wurde. In einfachen Fällen wäre ein setTimeout
genügen:
$('form').on('reset', function(e) {
setTimeout(function() {
$('input').val('yay it works now');
}, 0);
});
Dies funktioniert, da die setTimeout
irgendwann in der Zukunft ausgeführt wird, nachdem der reset
sprudelnden und der Browser seine Standardaktion behandelt beendet hat.
jedoch verliert diese Synchronizität. Sobald ich das Formular programmgesteuert zurücksetzen und von einem anderen Ort manipulieren muss, geht alles in den Abgrund.
$('form').on('reset', function(e) {
setTimeout(function() {
$('input').val("reset'd value");
}, 0);
});
//somewhere in another module..
$('form').trigger('reset');
$('input').val('value after resetting the form');
(Demo)
Natürlich ist alles soll synchron passieren, aber nur meine reset
Ereignisbehandlung geschoben asynchron in der Zukunft zu führen, so dass es am Ende laufen, nachdem alle der aktuellen synchronen Stapel Der Code wurde ausgeführt, als er direkt nach dem Zurücksetzen des Formulars ausgeführt werden sollte.
Lösungen ich gedacht habe:
- Nutzung noch eine weitere
setTimeout
nach demsetTimeout
laufen. Das ist übermäßig hässlich und ich weigere mich, in eine Hölle zu springen. - Implementieren Sie einen Wrapper zum Zurücksetzen des Formulars, das entweder eine Rückruffunktion übernimmt oder ein Zusicherungsobjekt zurückgibt. Das scheint ein bisschen übertrieben zu sein.
Wenn nur ein afterreset
Ereignis existiert .. Nun hat ich übersehen, etwas oder sind die Lösungen über meiner einzige Option?
Ich habe stieß auf diese Fragen bei der Suche:
Aber ihre Titel sind (imho) ein wenig irreführend, wie die tatsächlich sehen sind sehr weit von meinem Problem entfernt.
Es gibt auch keine Möglichkeit, ein Ereignis zu "handhaben", sobald der Browser seine Standardaktion bearbeitet hat, richtig? Das ist eher entmutigend. –
Nur aus Neugier, was Use Case dazu auffordert? – Blender
@Blender Ich habe einige [Select2] (http://ivaynberg.github.io/select2/) Instanzen. Ich möchte seine Daten auf meine Standardwerte setzen, wenn das Formular zurückgesetzt wird, aber die entsprechenden 'select' Elemente würden ihren selectedIndex zurücksetzen, nachdem ich die Select2 Daten eingestellt habe. ': (' –