How can I run a piece of code as soon as a form has been reset?
The reset event fires before the form fields get reset to their default values. So, for example:
$('form').on('reset', function(e) {
$('input').val('a value that should be set after the form has been reset');
});
This won't work. (Demo)
As the reset event fires before the browser handles the default form reset behavior, the code above simply sets the input's value right before the reset event's default action takes place, restoring the input's value to its default value. This makes sense, as so I'd be able to call e.preventDefault() to cancel the form resetting.
My use case requires executing code as soon as the form has been reset. In simple cases, a setTimeout would suffice:
$('form').on('reset', function(e) {
setTimeout(function() {
$('input').val('yay it works now');
}, 0);
});
This works, as the setTimeout will execute sometime in the future, after the reset has finished bubbling and the browser has handled its default action.
However, this loses synchronicity. As soon as I have to programmatically reset the form and manipulate it from another place, everything goes down the drain.
$('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)
Of course, everything is supposed to happen synchronously, but only my reset event handling is pushed to asynchronously run in the future, thus it ends up running after all the current synchronous pile of code has executed, when it was supposed to run right after the form has been reset.
Solutions I've thought about:
setTimeout to run after the setTimeout. This is overly ugly and I refuse to jump into a setTimeout hell.If only an afterreset event existed.. Well, did I overlook something or are the solutions above my only options?
I've came across these questions while searching:
But their titles are (imho) a bit misleading, seeing as those are actually very distant from my problem.
In your case, I think you just simply assign a default value to your textbox. As the form is reset, the browser will automatically reset it to the default value.
<form>
<input value="Abc" type="text"/>
<input type="reset" />
</form>
Check demo.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With