JQuery: входы для очистки формы
Я попытался по-разному очистить форму:
<form action="service.php" id="addRunner" name="addRunner" method="post">
First Name: <input type="text" name="txtFirstName" id="txtFirstName" /><br />
Last Name: <input type="text" name="txtLastName" id="txtLastName" /><br />
Gender: <select id="ddlGender" name="ddlGender"><option value="">--Please Select--</option>
<option value="f">Female</option>
<option value="m">Male</option>
</select><br />
Finish Time:
<input type="text" name="txtMinutes" id="txtMinutes" size="10" maxlength="2">(Minutes)
<input type="text" name="txtSeconds" id="txtSeconds" size="10" maxlength="2">(Seconds)
<br />
<button type="submit" name="btnSave" id="btnSave">Add Runner</button>
<input type="hidden" name="action" value="addRunner" id="action">
</form>
jQuery # 1:
function clearInputs(){
$("#txtFirstName").val('');
$("#txtLastName").val('');
$("#ddlGender").val('');
$("#txtMinutes").val('');
$("#txtSeconds").val('');
}
Это работает отлично.
jQuery # 2:
function clearInputs(data){
$("#addRunner :input").each(function(){
$(this).val('');
});
Это очищает форму, но не позволяет мне отправлять ей какую-либо информацию. Я пытаюсь снова нажать кнопку и ничего не делает.
Здесь обработчик кнопки:
$("#btnSave").click(function(){
var data = $("#addRunner :input").serializeArray();
$.post($("#addRunner").attr('action'), data, function(json){
if (json.status == "fail"){
alert(json.message);
}
if (json.status == "success"){
alert(json.message);
clearInputs();
}
}, "json");
});
PHP Почтовый индекс:
<?php
if($_POST){
if ($_POST['action'] == 'addRunner') {
$fname = htmlspecialchars($_POST['txtFirstName']);
$lname = htmlspecialchars($_POST['txtLastName']);
$gender = htmlspecialchars($_POST['ddlGender']);
$minutes = htmlspecialchars($_POST['txtMinutes']);
$seconds = htmlspecialchars($_POST['txtSeconds']);
if(preg_match('/[^\w\s]/i', $fname) || preg_match('/[^\w\s]/i', $lname)) {
fail('Invalid name provided.');
}
if( empty($fname) || empty($lname) ) {
fail('Please enter a first and last name.');
}
if( empty($gender) ) {
fail('Please select a gender.');
}
if( empty($minutes) || empty($seconds) ) {
fail('Please enter minutes and seconds.');
}
$time = $minutes.":".$seconds;
$query = "INSERT INTO runners SET first_name='$fname', last_name='$lname', gender='$gender', finish_time='$time'";
$result = db_connection($query);
if ($result) {
$msg = "Runner: ".$fname." ".$lname." added successfully" ;
success($msg);
} else {
fail('Insert failed.');
}
exit;
}
}
Если я использую метод jQuery # 2, я получаю эту ошибку в консоли:
Uncaught TypeError: Cannot read property 'status' of null
Почему это происходит?
Я забыл включить эту ключевую информацию:
function fail ($message){
die(json_encode(array('status'=>'fail', 'message'=>$message)));
}
function success ($message){
die(json_encode(array('status'=>'success', 'message'=>$message)));
Отправляет сообщение обратно в функцию AJAX в jQuery. Похоже, что после того, как я отправлю форму один раз, используя метод # 2, сообщения об успешном завершении/сбое завершаются.
Ответы
Ответ 1
Демо: http://jsfiddle.net/xavi3r/D3prt/
$(':input','#myform')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
Исходный ответ: Сброс многоступенчатой формы с помощью jQuery
Предложение Майка (из комментариев) сохранить флажок и выбрать неповрежденный!
Предупреждение: Если вы создаете элементы (поэтому они не находятся в dom), замените :hidden
на [type=hidden]
или все поля будут проигнорированы!
$(':input','#myform')
.removeAttr('checked')
.removeAttr('selected')
.not(':button, :submit, :reset, :hidden, :radio, :checkbox')
.val('');
Ответ 2
Я бы recomment, используя старый добрый javascript:
document.getElementById("addRunner").reset();
Ответ 3
Взял некоторый поиск и чтение, чтобы найти метод, который соответствовал моей ситуации, в форме submit, запустить ajax на удаленном php script, при успешном/неудачном информировании пользователя, при полной очистке формы.
У меня были некоторые значения по умолчанию, все другие методы, связанные с .val(''), тем самым не сбросили, но очистили форму.
Я получил эту работу, добавив в форму reset кнопку с идентификатором myform
:
$("#myform > input[type=reset]").trigger('click');
Это для меня был правильный результат по сбросу формы, о и не забывайте
event.preventDefault();
чтобы остановить отправку формы в браузере, как я сделал:).
Привет
Джако
Ответ 4
Вы можете попробовать
$("#addRunner input").each(function(){ ... });
Входы не являются селекторами, поэтому вам не нужен :
Не проверял его с помощью вашего кода. Просто догадайтесь!
Ответ 5
Я понял, что это было! Когда я очистил поля, используя метод each(), он также очистил скрытое поле, которое необходимо запустить php:
if ($_POST['action'] == 'addRunner')
Я использовал: not() для выбора, чтобы он не очистил скрытое поле.