我尝试过用不同的方法来清除表单:
<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)));
这会将消息发送回jQuery中的AJAX函数。看起来在我使用方法#2提交表单一次之后,成功/失败消息就被清除了。
发布于 2013-06-07 00:00:33
我会使用好的旧javascript重新注释:
document.getElementById("addRunner").reset();
发布于 2013-07-17 05:28:24
我花了一些搜索和阅读找到一个适合我的情况的方法,在表单提交上,运行ajax到一个远程php脚本,成功/失败通知用户,完成清除表单。
我有一些默认值,所有其他方法都涉及.val(''),因此不重置而是清除表单。
我通过在表单中添加一个重置按钮来实现这一点,该按钮的id为myform
$("#myform > input[type=reset]").trigger('click');
这对我来说是重置表单的正确结果,哦,别忘了
event.preventDefault();
停止在浏览器中提交表单,就像我所做的那样:)。
问候
Jacko
发布于 2011-10-17 18:21:02
你可以试试
$("#addRunner input").each(function(){ ... });
输入不是选择器,所以你不需要:
没有在你的代码中测试它。只是快速猜测一下!
https://stackoverflow.com/questions/7792320
复制相似问题