jQuery:清除表单输入 [英] jQuery: Clearing Form Inputs

查看:186
本文介绍了jQuery:清除表单输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试用不同的方式清除表单:

 < form action =service.phpid = addRunnername =addRunnermethod =post> 
名字:< input type =textname =txtFirstNameid =txtFirstName/>< br />
姓氏:< input type =textname =txtLastNameid =txtLastName/>< br />
性别:< select id =ddlGendername =ddlGender>< option value => - 请选择 - < / option>
< option value =f>女性< / option>
< option value =m>男性< / option>
< / select>< br />
完成时间:
< input type =textname =txtMinutesid =txtMinutessize =10maxlength =2>(分钟)
& input type =textname =txtSecondsid =txtSecondssize =10maxlength =2>(秒)
< br /
< button type =submitname =btnSaveid =btnSave>添加跑步者< / button>
< input type =hiddenname =actionvalue =addRunnerid =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('提供的名称无效。
}
if(empty($ fname)|| empty($ lname)){
fail('请输入名和姓。
}
if(empty($ gender)){
fail('请选择性别。
}
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,我在控制台中得到这个错误:

 未捕获的TypeError:无法读取属性'status'为什么会发生这种情况?



我忘了包含这个关键信息:

  function fail($ message){
die(json_encode status'=>'fail','message'=> $ message)));
}

function success($ message){
die(json_encode(array('status'=>'success','message'=> $ message)) );

这会将消息发送回jQuery中的AJAX函数。

解决方案

演示:

a href =http://jsfiddle.net/xavi3r/D3prt/> http://jsfiddle.net/xavi3r/D3prt/

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

原始答案:使用jQuery重置多阶段表单






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

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


I have tried to different ways to clear a form:

<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('');
}

This works perfectly.

jQuery #2:

function clearInputs(data){
$("#addRunner :input").each(function(){
$(this).val('');
});

This clears the form but does not let me submit any more any information to it. I try and click the button again and it does nothing.

Here's the button click handler:

$("#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 code:

<?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;
}

}

If I use jQuery method #2, I get this error in the console:

Uncaught TypeError: Cannot read property 'status' of null

Why does this happen?

I forgot to include this key information:

function fail ($message){
    die(json_encode(array('status'=>'fail', 'message'=>$message)));
}

function success ($message){
    die(json_encode(array('status'=>'success', 'message'=>$message)));

This sends the message back to the AJAX function in jQuery. It looks like after I submit the form once using method #2 the success/fail messages are blanked out.

解决方案

Demo : http://jsfiddle.net/xavi3r/D3prt/

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

Original Answer: Resetting a multi-stage form with jQuery


Mike's suggestion (from the comments) to keep checkbox and selects intact!

Warning: If you're creating elements (so they're not in the dom), replace :hidden with [type=hidden] or all fields will be ignored!

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

这篇关于jQuery:清除表单输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆