#php #javascript #jquery #jquery-validate
#php #javascript #jquery #jquery-проверка
Вопрос:
У меня есть контактная форма, которая выполняет действие PHP. Контактная форма связана с механизмом проверки в jQuery. Если сообщение отправлено правильно, я просто включаю PHP-файл с сообщением благодарности — require_once('success.php');
. После отправки сообщения я хотел бы заменить контактную форму сообщением благодарности без перезагрузки всей страницы. Пожалуйста, дайте мне несколько советов, как это сделать. Вот мой html:
<div id="contactForm">
<form id="expertForm" class="formular" method="post" action="send.php">
<fieldset>
<label>
<input name="email"
id="email"
class="required email"
type="text"
size="40"/>
</label>
<p>
<textarea name="body" id="body" rows="5" cols="50" class="required"></textarea>
</p>
</fieldset>
<input class="submit"
type="image"
src="../images/btn-send.png"/>
</form>
</div>
<script type="text/javascript">
$("#expertForm").validate();
</script>
У send.php
меня есть:
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
require_once('success.php');
}
Ответ №1:
Вы можете увидеть почти рабочую демонстрацию здесь http://jsfiddle.net/v7MJA/1 /
$(function(){
$("#expertForm").submit(function(e){
e.preventDefault();
if(!$(this).validate().form()) return false;
$.ajax({
url:$(this).attr('action'),
data:$(this).serialize(),
type:'post',
success:function(msg){
$("#expertForm").replaceWith(msg);
}
});
});
});
Комментарии:
1. Я попробовал ваше решение. Замена выполнена правильно. Но возникла проблема с проверкой. Хотя не все входные данные формы заполнены, а плагин проверки вызывает ошибки (они появляются на странице около 0,5 секунды), действие выполняется, и электронное письмо отправляется. Я использую bassistance.de/jquery-plugins/jquery-plugin-validation для проверки.
2. Я отредактировал код для вас, вы также можете проверить скрипку jsfiddle.net/v7MJA . Спасибо
Ответ №2:
Вам лучше дать нам какой-нибудь код, чтобы мы могли помочь.
Вот теоретический способ: используйте success
событие вызова jquery ajax
[ref]:
$.ajax({
url: "test.html",
context: document.body,
success: function(){
$("#myformdiv").html("Thanks!");
}
});
предполагая, что ваша HTML-разметка выглядит примерно так:
<div id="myformdiv">
<form>
<!-- form code here -->
</form>
</div>
Комментарии:
1. Вы можете использовать функцию загрузки для загрузки отдельной страницы, если это то, что вам нужно. Замените
html("Thanks!");
наload("success.php");
, и он загрузитсяsuccess.php
как отдельная страница и вставит ее в этот элемент.
Ответ №3:
Предполагая, что я правильно понял ваш вопрос, вы можете использовать replaceWith
метод для замены соответствующих элементов указанным содержимым:
$("#yourForm").replaceWith("<p>Thanks!</p>");
Я предполагаю, что вы делаете что-то асинхронно для отправки данных формы на сервер, поэтому вы можете просто запустить приведенный выше код в обратном вызове:
$.post("yourScript.php", function() {
$("#yourForm").replaceWith("<p>Thanks!</p>");
});