jQuery:清除表单输入

jQuery:清除表单输入,jquery,forms,console,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="txtLast

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

<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#2:

这将清除表单,但不允许我向其提交更多信息。我试着再次点击按钮,但它什么也没做

以下是按钮单击处理程序:

$("#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 Post代码:

<?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;
}
为什么会发生这种情况

我忘了包括以下关键信息:

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提交表单后,成功/失败消息似乎被删除。

您可以尝试

$("#addRunner input").each(function(){ ... });
输入不是选择器,因此您不需要
还没有用你的代码测试它。只是一个快速猜测

演示:

原始答复:


Mike的建议(来自评论)保持复选框和选项不变

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

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

我建议使用好的旧javascript进行编译:

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

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

我有一些默认值,所有其他涉及的方法。val(“”)因此没有重置,而是清除表单

我也通过在表单中添加一个重置按钮来实现这一点,该按钮的id为
myform

$("#myform > input[type=reset]").trigger('click');
这对我来说是重置表单的正确结果,哦,别忘了

event.preventDefault();
要停止在浏览器中提交表单,请执行以下操作:)

问候


杰科

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

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

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

一些HTML会有所帮助,而在此上下文中您的PHP是不必要的。请显示表单的HTML。此外,您的代码可能会受到攻击。我最好不要提交
Robert';跳台跑步者--作为我的名字…@vzwick不,这不起作用,所以我想我是安全的:)这会处理一些基本的SQL注入:$fname=htmlspecialchars($_POST['txtFirstName']);这也是:如果(preg_match('/[^\w\s]/i',$fname)| preg_match('/[^\w\s]/i',$lname)){fail('提供的名称无效');我建议在选择输入后立即删除“checked”和“selected”属性,然后过滤掉:按钮、:submit、:reset、:hidden、:radio和:复选框以将其余输入的值设置为“”。否则,在清除后,您将发现自己的复选框和收音机没有任何值。因此,它是这样的:$(':input','#myform')。removeAttr('checked')。removeAttr('selected')。而不是(':button,:submit,:reset,:hidden,:radio,:checkbox')。val('');您实际上应该使用“reset()”方法。@请参阅jwaern答案。如果您不擅长使用javascript,您仍然可以$('which-the-selector-is').get(0).reset().Clean,不会从单选按钮和复选框中删除值,只需要一行javascript,可能比此解决方案快。@James您不需要
getElementById()的
,它仅用于jQuery的
$(…)
或本地JS等价物
querySelectorAll(…)
中的选择器字符串。
document.getElementById("addRunner").reset();
$("#myform > input[type=reset]").trigger('click');
event.preventDefault();
if ($_POST['action'] == 'addRunner')