Прежде чем я даже напишу свою проблему, я хочу заявить, что я прочитал множество сообщений StackOverflow об этом, и я все еще сталкиваюсь с той же проблемой. В основном, независимо от того, сколько способов я изменяю свой код, моя форма все равно отправляется без предварительной проверки, чтобы увидеть, заполнена ли каждая область. Это мой код.
<form id="contact" method="post" action="E-mail-form.php" name="EmailFromMyWebsite">
<label for="name">Name</label> <br>
<input type="text" name="name" class="required" placeholder="Your Name" title=" (Your name is required)"> <br />
<label for="email">E-mail</label> <br>
<input type="email" name="email" class="required email" placeholder="Name@email.com" title=" (Your email is required)"> <br />
<label for="message">Message/Comment</label> <br>
<textarea name="message" class="required" placeholder="Leave a brief message" title=" (Please leave me a brief message)"></textarea> <br />
<input type="button" name="submit" id="submit" value="Send Message" />
</form>
$(document).ready(function(){
$('#contact').validate({
rules: {
name: {required: true},
email: {required: true},
message: {required: true}
},
submitHandler: $(function(form){
$("#submit").on('click', function(){
var formData = $('#contact').serialize();
$.ajax({
type:"POST",
data:formData,
url:"E-mail-form.php",
done: function(data){
$('#contact').html('<p>Your message has been sent. I will reply to you shortly.</p>');
},
fail: function(data) {
$('#contact').html('<p>Sorry there was a problem your message was NOT sent.</p>');
}
});
return false;
});
})
});
});
Теперь я думаю, что первое, что кто-то заметит, это то, что у меня есть функция для отправки, но я попытался ее удалить, и моя форма просто не отправляется даже с помощью submitHandler. Я думаю, что именно здесь возникает проблема, потому что, когда я смотрю на другие форумы с этой проблемой, я не понимаю, что заставляет форму на самом деле отправляться без этого. Любая помощь или объяснение были бы очень полезны.
1 ответ
Цитировать ОП:
"Теперь я думаю, что первое, что кто-то заметит, это то, что у меня есть функция для отправки, но я попытался удалить ее, и моя форма просто не отправляется даже с помощью submitHandler. Я думаю, что здесь возникает проблема, потому что Когда я смотрю на другие форумы с этой проблемой, я не понимаю, почему форма на самом деле отправляется без этого. Любая помощь или объяснение были бы очень полезны ».
Вам нужно более внимательно изучить синтаксис этих рабочих примеров вместо того, чтобы вставлять случайные обработчики событий. Помещать обработчик click
внутри submitHandler
, который запускается только после нажатия кнопки, не имеет абсолютно никакого смысла.
Форма отправляется без обработчика click
, потому что плагин jQuery Validate уже имеет встроенный. Даже если вы не использовали опцию обратного вызова submitHandler
, плагин автоматически захватит событие click
кнопки ( пока это type="submit"
) и обработайте ее соответствующим образом. Однако в этом случае вам все равно нужно определить обратный вызов submitHandler
, потому что ему принадлежит ваш .ajax()
.
Итак, удалите обработчик click
.
Кроме того, в вашем коде есть синтаксические ошибки:
submitHandler: $(function(form){
// your ajax
})
Вы не помещаете $()
вокруг своей функции обратного вызова.
Это просто:
submitHandler: function(form) {
// your ajax
}
Или с вашим кодом ...
submitHandler: function (form) {
var formData = $(form).serialize(); // <- use the "form" argument here
$.ajax({
....
});
return false;
}
И, наконец, ваша кнопка должна иметь type="submit"
, чтобы плагин мог ее захватить.
<input type="submit" name="submit" id="submit" value="Send Message" />
Рабочий ДЕМО : http://jsfiddle.net/x4h8L/
type="submit"
. ( почему важно включать ваш HTML в OP .) Даже если я не видел вашу разметку и не дал решение, просто сравните мой рабочий jsFiddle с кодом вашего сайта, чтобы найти проблему.
Ваше сообщение отправлено. Я отвечу вам в ближайшее время.
'); Чтобы появиться на моем экране. }form
, представляет ваш #contact
, поэтому $(form).serialize()
то же самое.
Похожие вопросы
Новые вопросы
jquery
jQuery — это библиотека JavaScript. Также рассмотрите возможность добавления тега JavaScript. jQuery — это популярная кросс-браузерная библиотека JavaScript, которая упрощает обход объектной модели документа (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться рассматриваемым кодом, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.