2012-04-25 5 views
32

После нажатия кнопки сброса HTML,Как выполнить код после сброса формы html с помощью jquery?

<input type="reset" /> 

Я хотел бы выполнить код. Как я могу это сделать и убедиться, что форма была сброшена до этого?

+0

Вы можете привязать к событию сброса формы, однако, что происходит непосредственно перед входными значениями получить сброс. Нет события, которое запускается сразу после сброса входов. –

+0

Если вы должны подождать, пока входы будут сброшены, выполните setInterval в событии сброса, которое очистится, когда оно обнаружит, что значения ввода были сброшены, а затем запускает ваш код. –

+0

@OP Вы найдете что-нибудь полезное? – iambriansreed

ответ

39

Try:

$("input[type='reset']").on("click", function(event){ 

    alert('before reset: ' + $("input[type='text']").val()); 
    // executes before the form has been reset 

    event.preventDefault(); 
    // stops the form from resetting after this function 

    $(this).closest('form').get(0).reset(); 
    // resets the form before continuing the function 

    alert('after reset: ' + $("input[type='text']").val()); 
    // executes after the form has been reset 

});​ 

Вы можете сузить этот селектор формы вплоть до конкретной формы вовлеченной с идентификатором.

Fiddle Доказательство: http://jsfiddle.net/iambriansreed/Zh5cd/

+0

Почему downvote? Что я сделал не так? – iambriansreed

+0

Не знаете, кто проголосовал за вас и почему, но я проголосовал за вас и принял ваш ответ. Благодарю. –

+0

@BrianDavidBerman Спасибо! – iambriansreed

0

попробовать

$('your-form').bind('reset', function() { 
    alert('hi'); 
}); 
+0

[Эта ссылка] (http://forum.jquery.com/topic/trapping-the-form-reset-event) должна предоставить фон и некоторую документацию о том, как и почему это работает, а также, почему нет больше в документах jQuery, касающихся этого. –

+0

Выполняется до сброса формы. –

+0

попробуйте привязку к событию изменения внутри события, тогда как следующим изменением будет действие сброса –

-1

бы эта помощь

$("input[type='reset']").on("click", function(){ 
    alert("the form has been reset"); 
    }); 

ссылка jsfiddle: http://jsfiddle.net/sdkTz/1/

+1

Выполняется до сброса формы. –

-5

Добавить click событие на кнопку сброса, и он выглядит следующим образом:

function(e) { 
    setTimeout(function() { 
     // your actual code here 
    },1); 
} 
2

Update: использовать preventDefault вместо return false.

$('input[type="reset"]').click(function(evt) { 
    // Prevent the reset button from firing the form's reset event again 
    evt.preventDefault(); 
    $(this).closest('form').get(0).reset(); 
    // At this point your form's inputs should have their values reset 
}); 

http://jsfiddle.net/EYqrX/1/

+0

'return false;' делает больше, чем просто прекратить отправку формы. См .: http://stackoverflow.com/a/1357151/144665 – iambriansreed

+1

Я обновил свой ответ соответственно. Спасибо, что поймал это. –

+0

Теперь он выглядит как мой, за исключением предупреждающего вызова OP. :) – iambriansreed

119

Я не особенно нравится идея привязки событие сброса кнопкой сброса вместо формы. Форма может быть сброшена другими способами, и в тех случаях ваше событие не будет срабатывать.

Вместо этого привяжите функцию к событию сброса, но поместите ее в мгновенный setTimeout. Это обеспечит сброс формы до вызова функции.

$('form').on('reset', function(e) 
{ 
    setTimeout(function() { /* ... */ }); 
}); 
+0

Double plus upvote. – quillbreaker

+0

опускает второй параметр для универсальной поддержки setTimeout? w3schools и mozilla перечисляют его как необходимый параметр. похоже, хорошо работает во всех моих браузерах, но я не уверен в более старом IE – Kip

+1

@ Kip Да, он отлично работает в более старых IE. Не тестировали IE6, но я не слишком беспокоюсь об этом. Работает отлично и в строгом режиме. Однако добавление нуля может добавить некоторую ясность в ваш код. –

1

Предложение заключается в том, что вместо того, чтобы использовать <input type='Reset'><input type = "button"> использовать таким образом, вы не должны остановить поведение по умолчанию кнопки reset. Вам просто нужно добавить атрибут onclick к кнопке и в функции, которую вы могли бы вызвать метод сброса формы, где бы вы ни пожелали, и контролировать поведение по своему усмотрению. Следующий код показывает, что

HTML:

<input type="button" value="Limpiar" onclick="resetForm(this);"/> 

JavaScript:

function resetForm(element) { 
    //Do what you need before reset the form 
    element.form.reset(); //Reset manually the form 
    //Do what you need after reset the form 
} 
0

Вот пример, используя onreset событие аналогично тому, как вы обычно используете onsubmit событие элемента формы, чтобы щелкнуть кнопку отправки , Для уточнения добавляется пример onsubmit.

В вашем скрипте:

function submitForm(form){ 
    var xhr = new XMLHttpRequest(), 
     data = new FormData(form); 

    xhr.open("POST", url, true); 
    xhr.onload = function(event) { 
     switch (event.target.status){ 
      case 200: 
       onSuccess(event); 
       break; 
      default: 
       onError(event); 
     } 
    }; 
    xhr.send(data); 
    return false; 
} 

function resetForm(form){ 
    var elements = form.elements; 
    // set some initial values to those form elements 
    return false; 
} 

В вашем HTML:

<form onsubmit="return submitForm(this);" onreset="return resetForm(this);"> 
    <button type="submit">Save</button> 
    <button type="reset">Reset</button> 
</form> 
Смежные вопросы