jQuery:清除表单input
我试图用不同的方式来清除表单:
<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(''); });
这清除了表格,但不让我再提交任何信息。 我尝试再次点击button,它什么都不做。
这里是button点击处理程序:
$("#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)));
这将消息发送回jQuery中的AJAX函数。 看起来好像在我使用方法#2提交表单之后,成功/失败的消息被清空了。
演示: http : //jsfiddle.net/xavi3r/D3prt/
$(':input','#myform') .not(':button, :submit, :reset, :hidden') .val('') .removeAttr('checked') .removeAttr('selected');
原始答案: 使用jQuery重置多阶段表单
迈克的build议(从评论)保持checkbox,并select完好!
警告:如果你正在创build元素(所以他们不在DOM),replace:hidden
的[type=hidden]
或所有的字段将被忽略!
$(':input','#myform') .removeAttr('checked') .removeAttr('selected') .not(':button, :submit, :reset, :hidden, :radio, :checkbox') .val('');
我会推荐使用好老的javascript:
document.getElementById("addRunner").reset();
花了一些search和阅读find一个适合我的情况的方法,在表单提交,运行ajax到远程php脚本,成功/失败告知用户,完全清除表单。
我有一些默认值,所有其他涉及.val(''),因此不重置,但清除表单的方法。
我通过添加一个重置button来获得这个工作,该表单具有myform
的id:
$("#myform > input[type=reset]").trigger('click');
这对我来说,在重置表单的时候有了正确的结果哦,不要忘了
event.preventDefault();
停止在浏览器中提交表单,就像我做的:)。
问候
jackson
你可以试试
$("#addRunner input").each(function(){ ... });
input不是select器,所以你不需要:
没有用你的代码testing它。 只是一个快速的猜测!
我想清楚它是什么! 当我使用each()方法清除字段时,它也清除了php需要运行的隐藏字段:
if ($_POST['action'] == 'addRunner')
我使用:not()在select停止清除隐藏的领域。