Как я могу запустить кусок кода, как только форма была сброшена?Выполнить код, как только форма была сброшена
Событие reset
до поля формы возвращаются к значениям по умолчанию. Так, например:
$('form').on('reset', function(e) {
$('input').val('a value that should be set after the form has been reset');
});
Это не будет работать. (Demo)
Как reset
пожаров событий до того, как браузер обрабатывает поведение сброса вида по умолчанию, приведенный выше код просто устанавливает входной-х value
перед действием на reset
мероприятия по умолчанию происходит, восстановление значения на вход на его значение по умолчанию. Это имеет смысл, так как я мог бы позвонить e.preventDefault()
, чтобы отменить сброс формы.
В моем случае использования необходимо выполнить код, как только форма была сброшена. В простых случаях setTimeout
будет достаточно:
$('form').on('reset', function(e) {
setTimeout(function() {
$('input').val('yay it works now');
}, 0);
});
Это работает, как setTimeout
выполнит когда-нибудь в будущем, после того, как reset
закончил бульканье и браузер обработал свое действие по умолчанию.
Однако, это теряет синхронность. Как только я должен программно сбросить форму и манипулировать ею из другого места, все идет по канализации.
$('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)
Конечно, все должно происходить синхронно, но только мое обращение reset
события выталкиваются асинхронно работать в будущем, таким образом, он заканчивает работать после все текущей синхронной груды кода, когда он должен был запускаться сразу после сброса формы.
Solutions Я думал о:
- Используйте еще один
setTimeout
для запуска послеsetTimeout
. Это слишком уродливо, и я отказываюсь прыгать в ад.setTimeout
. - Внедрите оболочку для сброса формы, которая либо выполняет функцию обратного вызова, либо возвращает объект обещания. Однако это немного переборщило.
Если существует только событие afterreset
.. Ну, я пропустил что-то или решения выше моих единственных вариантов?
Я наткнулся на эти вопросы во время поиска:
Но их названия (имхо) немного вводит в заблуждение, видя, как те, на самом деле очень далекий от моей проблемы.
Невозможно «обработать» событие, как только браузер завершит действие по умолчанию, верно? Это довольно уныло. –
Просто из любопытства, какой прецедент подскажет вам сделать это? – Blender
@Blender У меня есть экземпляры [Select2] (http://ivaynberg.github.io/select2/). Я хочу установить свои данные в значения по умолчанию, когда форма сбрасывается, однако соответствующие элементы 'select' будут иметь свой сброс selectIndex после того, как я установил данные Select2. ': (' –