2009-08-12 3 views
75

Я искал через кучу страниц, но не могу найти свою проблему, поэтому мне пришлось сделать сообщение.Запретить форматирование перенаправить ИЛИ обновить на submit?

У меня есть форма, в которой есть кнопка отправки, а когда она отправлена, я хочу, чтобы она НЕ обновлялась или перенаправлялась. Я просто хочу, чтобы 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); 
} 

Я попытался с и без элемента действия по форме, но не знаю, что я я делаю неправильно. Что раздражает меня больше в том, что у меня есть пример, который делает это отлично: Example Page

Если вы хотите увидеть мою проблему жить, Гото stormink.net (мой сайт), и проверить боковой панели, где он говорит: «Пошли мне и электронную почту »и« Подписка на RSS ». Оба являются формами, над которыми я пытаюсь заставить это работать.

ответ

156

Просто обрабатывать данные формы на submit событие, и вернуться ложным:

$('#contactForm').submit(function() { 
sendContactForm(); 
return false; 
}); 

Вам не нужно больше событие OnClick на кнопку отправки:

<input class="submit" type="submit" value="Send" /> 
+7

Работал как шарм! И быстро, как что угодно! Мне нравится этот сайт! Большое вам спасибо. –

+2

Я помню тот момент, когда я узнал, что можно вернуть ложное сообщение от submit, чтобы не отправить, было также моментом, когда мне стало очень нравиться система Javascript/DOM. – Imagist

+0

Гений! Спасибо! – Roman

11

Похоже, что вам не хватает return false.

16

Здесь:

function submitClick(e) 
{ 
    e.preventDefault(); 
    $("#messageSent").slideDown("slow"); 
    setTimeout('$("#messageSent").slideUp(); 
    $("#contactForm").slideUp("slow")', 2000); 
} 

$(document).ready(function() { 
    $('#contactSend').click(submitClick); 
}); 

Вместо использования события onClick вы будете использовать привязку события «click» h andler с помощью jQuery на кнопку отправки (или любую кнопку), которая будет принимать sendClick как обратный вызов. Мы передаем событие обратному вызову для вызова preventDefault, что и помешает клику от отправки формы.

+0

$ ('# contactSend').нажмите (submitClick (е)); Он говорит мне, что «e» не определен ..:/ –

+3

Должно быть '$ ('# contactSend'). Click (function (e) {submitClick (e)});' или '$ ('# contactSend '). click (submitClick); ' – Aaron

3

Альтернативным решением было бы не использовать тег формы и обрабатывать событие click click при отправке через jquery. Таким образом, не будет обновления страницы, но в то же время есть недостаток, что кнопка «вводить» для отправки не работает, а также на мобильных телефонах, на которых вы не получите кнопку go (стиль на некоторых мобильных телефонах). Поэтому придерживайтесь использования тега формы и используйте принятый ответ.

9

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

<form id="contactForm" action="#"> 
+1

+1 для простого решения. Но, к сожалению, страница все равно будет обновляться при первом входе пользователя в игру. Плохая работа заключалась бы в том, чтобы называть 'myForm.submit();' как можно скорее, но затем вы дважды загружаете страницу. – cyclingLinguist

Смежные вопросы