jQuery:清除表单输入

时间:2011-10-17 10:18:11

标签: jquery forms console

我尝试过不同的方法来清除表单:

<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提交表单一次后,成功/失败消息就会消失。

5 个答案:

答案 0 :(得分:148)

演示:http://jsfiddle.net/xavi3r/D3prt/

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .removeAttr('checked')
  .removeAttr('selected');

原始答案:Resetting a multi-stage form with jQuery


迈克的建议(来自评论)保持复选框并完整选择!

警告:如果您要创建元素(因此它们不在dom中),请将:hidden替换为[type=hidden],否则将忽略所有字段!

$(':input','#myform')
  .removeAttr('checked')
  .removeAttr('selected')
  .not(':button, :submit, :reset, :hidden, :radio, :checkbox')
  .val('');

答案 1 :(得分:19)

我建议使用好的旧javascript:

document.getElementById("addRunner").reset();

答案 2 :(得分:4)

进行一些搜索和阅读以找到适合我的情况的方法,在表单提交,运行ajax到远程php脚本,成功/失败通知用户,完全清除表单。

我有一些默认值,所有其他方法涉及.val('')因此不会重置但清除表单。

我通过向表单添加重置按钮来实现此功能,该重置按钮的ID为myform

$("#myform > input[type=reset]").trigger('click');

这对我来说在重置表单方面有正确的结果,哦,别忘了

event.preventDefault();

停止在浏览器中提交表单,就像我做的那样:)。

此致

亚茨科

答案 3 :(得分:2)

您可以尝试

$("#addRunner input").each(function(){ ... });

输入不是选择器,因此您不需要: 没有用你的代码测试它。快速猜测!

答案 4 :(得分:0)

我弄清楚它是什么!当我使用each()方法清除字段时,它还清除了php需要运行的隐藏字段:

if ($_POST['action'] == 'addRunner') 

我在选择中使用了:not()来阻止它清除隐藏字段。