Intereting Posts
Узел атрибута XSLT (id) не может быть создан после того, как дочерние элементы содержащего элемента Поведение странного поведения таблицы в элементе LI jQuery html () и & amp; Z-index работает не так, как ожидалось, с изображением и фоном-div Соглашения об именах HTML для идентификатора, classа и включения префикса типа элемента? Новая строка ‘\ n’ не работает в Typcript Экспорт таблиц R в HTML Метеор передает идентификатор в ссылку Как я могу заполнить строки с нумерацией таблицы HTML на основе того, соответствуют ли они номер строки? рисование синусоидальной волны в canvasе Лучший способ центрировать на странице по вертикали и по горизонтали? Как остановить привязку свойств к каждому элементу в Angular внутри * ngFor Вопрос об упаковке при наличии плавающих divs Как изменить язык для кредитной карты / платежной страницы PayPal для клиента? Как конвертировать из Powerpoint в HTML / CSS? (СОПО)

Вызов функции после сброса формы

Есть ли способ для вызова функции после нажатия кнопки сброса в форме, и я имею в виду после этого, чтобы форма была сначала сброшена, а затем вызвана моя функция. Обычное событие bubbling вызовет мою функцию и только затем сбросит форму. Теперь я хотел бы избежать setTimeout, чтобы сделать это.

Мне нужно вызвать функцию, когда форма сбрасывается, потому что я использую равномерные и однородные потребности, которые нужно обновлять при изменении значений.

На данный момент я делаю это так:

//Reset inputs in a form when reset button is hit $("button[type='reset']").live('click', function(){ elem = this; //Sadly we need to use setTimeout to execute this after the reset has taken place setTimeout(function(){ $.each($(elem).parents('form').find(":input"), function(){ $.uniform.update($(this)); }); }, 50); }); 

Я попытался сделать все это на $(':input').change() но перезапуск элемента, похоже, не вызывает событие изменения.
Спасибо заранее за любую помощь.

В HTML-формах есть событие onReset, вы можете добавить свой звонок внутри:

 function updateForm() { $.each($('form').find(":input"), function(){ $.uniform.update($(this)); }); } 

Как указано в комментарии Фредерика Хамиди, вы также можете использовать bind :

 $('form').bind('reset', function() { $.each($(this).find(":input"), function(){ $.uniform.update($(this)); }); }); 

После некоторого тестирования появляется оба способа стрельбы до сброса, а не после. То, как вы делаете это сейчас, кажется лучшим.

Тот же вывод был найден в этом вопросе здесь

Я еще не тестировался во всех браузерах, но вы можете сделать свой заказ в рамках события click: http://jsfiddle.net/vol7ron/9KCNL/1/

 $(document).ready(function() { $("input:reset").click(function() { // apply to reset button's click event this.form.reset(); // reset the form window.alert($("input:text").val()); // call your function after the reset return false; // prevent reset button from resetting again }); }); 

Время от времени я работал над отладкой плагина, связанного с Google IE, и я решил основную ошибку с помощью пузырящегося трюка. Вот почему я сразу думаю в этом решении для вашей проблемы (конечно, должен быть кросс-браузер):

 

Таким образом вы можете захватить пузырь с помощью $ (‘# capture_bubble’) после запуска события сброса.

Вы можете быстро протестировать:

 (function($) { $(function() { $('#capture_bubble').live('click', function(){ console.debug('capture_bubble'); alert('capture_bubble') }) $("input[type='reset']").live('click', function(){ this.form.reset(); // forcing reset event console.debug('reset'); alert('reset') }); }); })(jQuery); 

Обратите внимание: this.form.reset (); (изменение сделано из-за наблюдения Джефф-Вильберта)

вам не нужно ждать 50 миллисекунд. Если вы используете setTimeout с тайм-аутом нуля, это фактически означает «нажимать этот код на стек событий». Так как гарантируется, что первый сброс формы будет выполнен, код в setTimeout будет гарантирован (в хорошо выполненных интерпретаторах javascript), чтобы получить доступ к требуемым значениям формы (после сброса). Вы можете использовать код ниже, без вины.

 var afterReset = function(){ var pushMeOntoTheEventStack = window.setTimeout(function(){ $("#form input").each(function(){ console.log( this.name + ' = ' + this.value ); }); },0); }; $("#form").on("reset",afterReset);