使用jQuery清除表单字段

tbu*_*ann 386 html forms jquery

我想清除表单中的所有输入和textarea字段.当使用类的输入按钮时,它的工作方式如下reset:

$(".reset").bind("click", function() {
  $("input[type=text], textarea").val("");
});
Run Code Online (Sandbox Code Playgroud)

这将清除页面上的所有字段,而不仅仅是表单中的字段.我的选择器如何只是实际重置按钮所在的形式?

nge*_*gen 612

对于jQuery 1.6+:

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .prop('checked', false)
  .prop('selected', false);
Run Code Online (Sandbox Code Playgroud)

对于jQuery <1.6:

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

请看这篇文章: 使用jQuery重置多阶段表单

要么

$('#myform')[0].reset();
Run Code Online (Sandbox Code Playgroud)

正如jQuery 建议的那样:

检索和修改DOM属性,如checked,selecteddisabled元素形式的元素状态,使用.prop()方法.

  • 不要使用它(选项1)如果你有收音机,复选框或选择,你会浪费很多时间在它们的值消失后找到一个奇怪的错误.正确的版本,它们的值保持不变:`$(':input').not(':button,:submit,:reset,:hidden').removeAttr('checked').removeAttr('selected'). not(':checkbox,:radio,select').val('');`(基于Jeppe Mariager-Lam的评论) (17认同)
  • 有理由避免第二种选择吗? (8认同)
  • 为了避免删除复选框值,我使用了以下内容,灵感来自你的答案:`$(':input').not(':button,:submit,:reset,:hidden').removeAttr('checked').removeAttr ('selected').not(':checkbox,select').val('').removeAttr('value');`.它将删除默认值(即`value ="某事"`,但不是复选框或选择. (6认同)
  • 你的第二个解决方案是实际答案 (6认同)
  • 第一段代码将复选框的值设置为""而不是仅取消选中它们.并且它不会影响选择,因为它是被选中的选项标签. (3认同)
  • 第二个选项将字段值重置为其原始值,而选项1完全清空表单. (3认同)
  • 大多数时候第二种选择是我们需要的IMO. (3认同)

Sha*_*ake 473

$(".reset").click(function() {
    $(this).closest('form').find("input[type=text], textarea").val("");
});
Run Code Online (Sandbox Code Playgroud)

  • 这个答案涵盖了原始问题.那些不仅仅需要文本字段的人显然需要根据需要添加代码...... (64认同)
  • 不要忘记你的`input [type = password]`字段. (48认同)
  • 一个小提示:此选择器不会选择依赖于隐式type = text的输入元素,您必须在标记上明确包含type = text.这可能是显而易见的,但现在不适合我:-) (5认同)
  • 还记得HTML5中除了type = password(比如SammyK所说)之外会有更多类型的输入:type = url,type = digits,type = email等[http://www.w3.org/TR/html5/ ] forms.html#的最型属性状态(http://www.w3.org/TR/html5/forms.html#states-of-the-type-attribute) (2认同)
  • @CaptSaltyJack:将它们重置为默认值,这与清除它们不同... (2认同)
  • 不包括隐藏的字段. (2认同)

use*_*680 153

有什么理由不应该使用?

$("#form").trigger('reset');
Run Code Online (Sandbox Code Playgroud)

  • @ pythonian29033:并且根据您的方法,您将页面上的所有表单重置为默认值...这绝对不是普通开发人员想要的.我认为jQuery开发人员应该注意到他/她需要将选择器从示例代码更改为适当的代码... (17认同)
  • 这个不会清除具有默认值的字段. (13认同)
  • @ Sk8erPeter如果页面上有多个ID为`form`的元素,那你就错了.如果选择器是`form`你是对的,但它更像是ID选择器`#form`. (6认同)
  • 我认为清除和重置表单是不同的。检查这个演示:https://jsfiddle.net/daubac402/7newh9Lk/ (2认同)

par*_*mar 60

这不会处理表单输入字段具有非空默认值的情况.

有点像应该工作

$('yourdiv').find('form')[0].reset();
Run Code Online (Sandbox Code Playgroud)


Luk*_*kas 50

如果你使用选择器并使值为空值,它不会重置表单,它会使所有字段为空.重置是在从服务器端加载表单之后,从用户执行任何编辑操作之前的格式.如果存在名称为"username"的输入并且该用户名是从服务器端预填充的,则此页面上的大多数解决方案将从输入中删除该值,而不是将其重置为用户更改之前的值.如果您需要重置表单,请使用:

$('#myform')[0].reset();
Run Code Online (Sandbox Code Playgroud)

如果您不需要重置表单,但用一些值填充所有输入,例如空值,那么您可以使用其他注释中的大多数解决方案.


jro*_*web 28

简单,但工作就像一个魅力.

$("#form").trigger('reset'); //jquery
document.getElementById("myform").reset(); //native JS
Run Code Online (Sandbox Code Playgroud)

  • 除了它没有清除字段.它将它们设置为默认值. (14认同)

Tar*_*ste 27

如果有人还在阅读这个帖子,这里是最简单的解决方案,不是使用jQuery,而是使用简单的JavaScript.如果输入字段在表单内,则有一个简单的JavaScript重置命令:

document.getElementById("myform").reset();
Run Code Online (Sandbox Code Playgroud)

更多关于它:http: //www.w3schools.com/jsref/met_form_reset.asp

干杯!

  • 这也不会清除具有默认值的字段. (5认同)

ape*_*pen 20

$('form[name="myform"]')[0].reset();
Run Code Online (Sandbox Code Playgroud)


Mat*_*all 15

为什么需要使用任何JavaScript?

<form>
    <!-- snip -->
    <input type="reset" value="Reset"/>
</form>
Run Code Online (Sandbox Code Playgroud)

http://www.w3.org/TR/html5/the-input-element.html#attr-input-type-keywords


首先尝试一下,它不会清除具有默认值的字段.

这是用jQuery做的一种方法,然后:

$('.reset').on('click', function() {
    $(this).closest('form').find('input[type=text], textarea').val('');
});
Run Code Online (Sandbox Code Playgroud)

  • `.live()`已被弃用,而且它很慢/不必要.你可以使用`.bind()`或`.on()`. (3认同)

mum*_*air 11

我有最简单的技巧来重置表单

jQuery("#review-form")[0].reset();
Run Code Online (Sandbox Code Playgroud)

要么

$("#review-form").get().reset();
Run Code Online (Sandbox Code Playgroud)


Ras*_*yal 11

如果你想清空所有输入盒而不管它的类型,那么它只需要一分钟

 $('#MyFormId')[0].reset();
Run Code Online (Sandbox Code Playgroud)


BoC*_*ill 10

使用Javascript,您只需使用此语法即可 getElementById("your-form-id").reset();

你也可以通过这种方式调用reset函数来使用jquery $('#your-form-id')[0].reset();

记住不要忘记[0].如果,您将收到以下错误

TypeError:$(...).reset不是函数

JQuery还提供了一个可以使用的事件

$( '#form_id')的触发器( "重置").

我试过,它的工作原理.

注意:重要的是要注意这些方法只将表单重置为服务器在页面加载时设置的初始值.这意味着如果在进行随机更改之前将输入设置为值"设置值",则在调用reset方法后,该字段将重置为相同的值.

希望能帮助到你


Lew*_*urn 9

通过使用 JQuery.trigger()和本机 Javascript的组合.reset(),所有表单元素都可以重置为空白状态。

$(".reset").click(function(){
    $("#<form_id>").trigger("reset");
});
Run Code Online (Sandbox Code Playgroud)

替换<form_id>为要重置的表单 ID。


Mat*_*eno 7

我用这个:

$(".reset").click(function() {
  $('input[type=text]').each(function(){
     $(this).val('');
  });
});
Run Code Online (Sandbox Code Playgroud)

这是我的按钮:

<a href="#" class="reset">
  <i class="fa fa-close"></i>
     Reset
</a>
Run Code Online (Sandbox Code Playgroud)


Gre*_*ers 7

你们中的一些人抱怨无线电等被清除了默认的“选中”状态...您所要做的就是将 :radio、:checkbox 选择器添加到 .not 中,问题就解决了。

如果您无法使所有其他重置功能正常工作,则此功能可以。


小智 6

假设您想清除除帐户类型之外的字段,同时下拉框将重置为特定值,即“全部”。其余字段应重置为空,即文本框。此方法将用于清除特定领域作为我们的要求。

 $(':input').not('#accountType').each( function() {

    if(this.type=='text' || this.type=='textarea'){
             this.value = '';
       }
    else if(this.type=='radio' || this.type=='checkbox'){
         this.checked=false;
      }
         else if(this.type=='select-one' || this.type=='select-multiple'){
              this.value ='All';
     }
 });
Run Code Online (Sandbox Code Playgroud)


小智 6

$('#editPOIForm').each(function(){ 
    this.reset();
});
Run Code Online (Sandbox Code Playgroud)

表格editPOIFormid属性在哪里.

  • 只有一个`#editPOIForm`,所以`.each()`方法没有任何意义.即使您将此ID添加到多个表单,它也只会返回其中一个. (2认同)
  • @ThomasDaugaard:除了如果你使用get(0)或只是$('#editPOIForm')[0]你将得到一个脚本错误,如果$('#editPOIForm')没有匹配元素,而每个()将失败没有一个错误.所以我认为,就错误处理而言,这取决于你的优先级. (2认同)

小智 6

最简单和最好的解决方案是-
$("#form")[0].reset();

不要在这里使用 -
$(this)[0].reset();


小智 6

$(document).ready(function() {
    $('#reset').click(function() {
    $('#compose_form').find("input[type=text] , textarea ").each(function() {
    $(this).val('');
   });
  });
});  
Run Code Online (Sandbox Code Playgroud)


Mon*_*zur 5

在您想要通过 jQuery 调用正常重置函数的地方使用此代码

setTimeout("reset_form()",2000);
Run Code Online (Sandbox Code Playgroud)

并在文档就绪时将此函数写入站点 jQuery

<script>
function reset_form()
{
    var fm=document.getElementById('form1');
    fm.reset();
}
</script>
Run Code Online (Sandbox Code Playgroud)


小智 5

你为什么不用document.getElementById("myId").reset();?这很简单漂亮


Dee*_*ode 5

经过测试和验证的代码:

  $( document ).ready(function() {
    $('#messageForm').submit(function(e){
       e.preventDefault();
    });
    $('#send').click(function(e){
      $("#messageForm")[0].reset();
    });
  });
Run Code Online (Sandbox Code Playgroud)

必须包含Javascript $(document).ready,它必须与您的逻辑一致.