Запретить перенаправление формы или обновить при отправке?
Я просмотрел кучу страниц, но не могу найти свою проблему, поэтому мне пришлось сделать сообщение.
у меня есть форма, которая имеет кнопку отправки, и при отправке я хочу, чтобы она не обновлялась и не перенаправлялась. Я просто хочу, чтобы jQuery, чтобы выполнить функцию.
вот форма:
<form id="contactForm">
<fieldset>
<label for="Name">Name</label>
<input id="contactName" type="text" />
</fieldset>
<fieldset>
<label for="Email">Email</label>
<input id="contactEmail" type="text" />
</fieldset>
<fieldset class="noHeight">
<textarea id="contactMessage" cols="20"></textarea>
<input id="contactSend" class="submit" type="submit" onclick="sendContactForm()" />
</fieldset>
</form>
<small id="messageSent">Your message has been sent.</small>
и вот jQuery:
function sendContactForm(){
$("#messageSent").slideDown("slow");
setTimeout('$("#messageSent").slideUp();$("#contactForm").slideUp("slow")', 2000);
}
Я пробовал с элементом действия и без него в форме, но не знаю, что я делаю неправильно. Что раздражает меня больше что у меня есть пример, который делает это отлично:
Страница
Если вы хотите увидеть мою проблему вживую, Гото stormink.net (Мой сайт) и проверьте боковую панель, где написано "отправить мне и по электронной почте" и "подписка RSS". Обе формы, которые я пытаюсь заставить это работать.
6 ответов:
просто обрабатывать форму представления на отправить событие, и возвращает false:
$('#contactForm').submit(function () { sendContactForm(); return false; });вам больше не нужно событие onclick на кнопке отправки:
<input class="submit" type="submit" value="Send" />
здесь:
function submitClick(e) { e.preventDefault(); $("#messageSent").slideDown("slow"); setTimeout('$("#messageSent").slideUp(); $("#contactForm").slideUp("slow")', 2000); } $(document).ready(function() { $('#contactSend').click(submitClick); });вместо использования события onClick вы будете использовать привязку обработчика событий "click" с помощью jQuery к кнопке отправки (или любой другой кнопке), которая будет принимать submitClick в качестве обратного вызова. Мы передаем событие на обратный вызов call preventDefault, который является то, что предотвратит щелчок от отправки формы.
в открывающем теге формы установите атрибут действия следующим образом:
<form id="contactForm" action="#">
альтернативным решением было бы не использовать тег формы и обрабатывать событие щелчка по кнопке отправки через jquery. Таким образом, не будет никакого обновления страницы, но в то же время есть недостаток, что кнопка "enter" для отправки не будет работать, а также на мобильных телефонах вы не получите кнопку go( стиль в некоторых мобильных телефонах). Поэтому придерживайтесь использования тега формы и используйте принятый ответ.
если вы хотите, чтобы отображались Ошибки браузера по умолчанию, например, те, которые вызваны атрибутами HTML (отображаются перед любой обработкой JS клиентского кода):
<input name="o" required="required" aria-required="true" type="text">вы должны использовать
submitсобытие вместоclickсобытие. В этом случае автоматически появится всплывающее окно с запросом"пожалуйста, заполните это поле". Даже сpreventDefault:$('form').on('submit', function(event) { event.preventDefault(); my_form_treatment(this, event); }); // -> this will show up a "Please fill out this field" pop-up before my_form_treatmentкак кто-то упомянул ранее,
return falseостановит распространение (т. е. если есть больше обработчиков, прикрепленных к отправке формы, они не будут выполнены), но в этом случае действие, инициированное браузером, всегда будет выполняться первым. Даже сreturn falseв конце.так если вы хотите избавиться от этих всплывающих окон по умолчанию используйте
clickсобытие на кнопку Submit:$('form input[type=submit]').on('click', function(event) { event.preventDefault(); my_form_treatment(this, event); }); // -> this will NOT show any popups related to HTML attributes
Comments