如何使用jQuery与.reset()方法重置表单


270

单击重置按钮时,我有可以重置表单的工作代码。但是,在我的代码变长之后,我意识到它不再起作用了。

 <div id="labels">
        <table class="config">
            <thead>
                <tr>
                    <th colspan="4"; style= "padding-bottom: 20px; color:#6666FF; text-align:left; font-size: 1.5em">Control Buttons Configuration</th>
                </tr>
                <tr>
                    <th>Index</th>
                    <th>Switch</th>
                    <th>Response Number</th>
                    <th>Description</th>
                </tr>
            </thead>
            <tbody>

                <form id="configform" name= "input" action="#" method="get">
                <tr><td style="text-align: center">1</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" value="" id="number_one"></td>
                    <td><input style="background: white; color: black;" type="text"  id="label_one"></td>
                </tr>
                <tr>
                    <td style="text-align: center">2</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id = "number_two" value=""></td>
                    <td><input style="background: white; color: black;" type="text"  id = "label_two"></td>
                </tr>
                <tr>
                    <td style="text-align: center">3</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id="number_three" value=""></td>
                    <td><input style="background: white; color: black;" type="text" id="label_three"></td>
                </tr>
                <tr>
                    <td style="text-align: center">4</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id="number_four" value=""></td>
                    <td><input style="background: white; color: black;" type="text" id="label_three"></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" id="configsubmit" value="Submit"></td>
                </tr>
                <tr>
                    <td><input type="reset" id="configreset" value="Reset"></td>
                </tr>

                </form>
            </tbody>
        </table>

    </div>

而我的jQuery:

 $('#configreset').click(function(){
            $('#configform')[0].reset();
 });

为了使该.reset()方法有效,我应该在代码中包含一些来源吗?以前我使用的是:

<script src="static/jquery.min.js">
</script>
<script src="static/jquery.mobile-1.2.0.min.js">
</script>

并且该.reset()方法有效。

目前我正在使用

<script src="static/jquery-1.9.1.min.js"></script>      
<script src="static/jquery-migrate-1.1.1.min.js"></script>
<script src="static/jquery.mobile-1.3.1.min.js"></script>

可能是原因之一吗?


你能举一个不工作的例子吗?是否有任何字段被重置?
阿伦·约翰尼

像这样,但是在这里可以正常工作jsfiddle.net/chJ8B :(可能是因为脚本的其他部分吗?但是我只有一种形式
yvonnezoe 2013年

我的问题是,该字段是否未重置/某些字段是否正在工作
Arun P Johny,

13
您的HTML无效。表单不能是TBODY元素的子元素,TR不能是FORM元素的子元素。将表格标签放在表格外(即将表格放在表格中)。表单很可能已移到表的外部,但是表单控件保留在单元格中,因此不再存在于表单中。
RobG

@RobG:好点!我会尝试的。谢谢!如果我不回到这里得到我的小提琴链接,我可能会错过这个有用的评论:s
yvonnezoe

Answers:


463

您可以尝试使用trigger() 参考链接

$('#form_id').trigger("reset");

2
简直就是神奇而直截了当!非常感谢分享。
阿杰·库玛

亲爱的选民,请您告诉我您的不赞成票的原因,以便我改善答案。
SagarPPanchal

我正在使用$('。profile_img_form')。trigger('reset'); 我在表单上添加了profile_img_form名为class的类,然后将其命名。它不会重置我的表单并返回错误消息,例如Uncaught SyntaxError:无效的正则表达式:/(^|\.)bs\.(?:.*\.|)fileinput(\.|$)/:请提示是什么问题。谢谢。
Kamlesh

@Kamlesh它应该工作,我为您创建了一个演示,单击jsfiddle.net/Lkt4eq9y/2
SagarPPanchal

1
感谢你的回答。Googling / SO'ing节省的时间:)
Anjana Silva

276

http://jsfiddle.net/8zLLn/

  $('#configreset').click(function(){
        $('#configform')[0].reset();
  });

将其放在JS小提琴中。按预期工作。

因此,上述任何问题在这里都没有错。也许您有一个冲突的ID问题?点击是否实际执行?

编辑:(因为我是一个没有适当注释能力的麻袋)这不是直接与您的代码有关的问题。当您将其从当前使用的页面上下文中移出时,它可以很好地工作,因此,与其使用特定的jQuery / javascript和属性表单数据代替它,不如将其变为其他东西。我将一分为二地围绕它的代码,然后尝试查找它的运行情况。我的意思是,只是为了“确定”,我想你可以...

console.log($('#configform')[0]);

在点击功能中,并确保它定位到正确的表单...

如果是这样,则必须是未在此处列出的内容。

编辑第2部分:您可以尝试的一件事(如果未正确定位)是使用“ input:reset”而不是您正在使用的...。此外,我建议您这样做,因为这不是错误地发现目标的原因实际点击的目标是什么。只需打开firebug /开发人员工具,您拥有什么,就投入

console.log($('#configreset'))

看看会弹出什么。然后我们可以从那里去。


没有冲突的ID :(我正在尝试逐层选择并检查点击是否有效
yvonnezoe

1
嗯似乎点击不起作用!我$('#ptest').html("clicked reset")在click(function(){})中添加了内容;应该显示“已单击的重置”但没有显示的地方
yvonnezoe

我在这里有一个问题。每当我使用console.log时,我都不知道在哪里寻找它。我正在使用Python IDLE和一个终端来运行python脚本。javascript在其中。无论如何,当我使用`alert($('#configform')[0])时,它给了我[object HTMLFormElement]
yvonnezoe 2013年

1
尝试使用alert(JSON.stringify($'#configform')[0]))。Alert不太在乎漂亮的打印对象(或告诉您其中包含什么)。它只是让您知道它是一个对象。
2013年

1
@DylanChensky jQuery的神奇之处在于所有内容都是一个集合(数组)。就像您在jQuery中使用常规数组一样,[0]选择第一个元素。但是在jQuery中,它选择元素的实际html。因此,[0]为您提供了html,它使您可以调用html方法,而不是jQuery方法reset。有关更多信息,请参见下面的@kevin的答案。
FullOnFlatWhite

110

根据此处的这篇文章,jQuery没有reset()方法。但是原生JavaScript可以。因此,可以使用以下任一方法将jQuery元素转换为JavaScript对象:

$("#formId")[0].reset()
// or
$("#formId").get(0).reset()

1
它有效,我同意,jQuery没有reset()方法。您可以在w3school doc上看到如何使用本机JavaScript进行操作: w3schools.com/jsref/met_form_reset.asp
serfer2 2014年

2
我想指出的是,这只会重置表格,不会清除它。即,如果表单具有随请求发送的值,则将恢复这些值。
保护者

我想添加有关占位符,表单的初始呈现,表单元素具有占位符值的注释,此重置后,无论是否再次显示占位符,但值都变为空白,因此在进行表单验证时要小心。我正在添加通用表单验证来检查占位符值是否为默认值。
Ramratan Gupta

48

实际上,这是在原始Javascript中比jQuery更容易完成的事情之一。jQuery没有reset方法,但是HTML Form元素却有,因此您可以按以下形式重置所有字段:

document.getElementById('configform').reset();

如果您通过jQuery执行此操作(如在此处的其他答案所示$('#configform')[0].reset()),则[0]将会获取与您直接通过DOM获得的表单DOM元素相同的形式document.getElementById。不过,后一种方法既高效又简单(因为使用jQuery方法,您首先要获得一个集合,然后必须从中获取一个元素,而使用香草Javascript,您只能直接获取该元素)。


23

重置按钮根本不需要任何脚本(或名称或ID):

<input type="reset">

到此为止。但是,如果您确实必须使用脚本,请注意,每个表单控件都有一个引用其所在表单的form属性,因此您可以执行以下操作:

<input type="button" onclick="this.form.reset();">

但是重设按钮是更好的选择。


你的意思是仅仅那条线就能做到吗?哦,我的HTML正确吗?
yvonnezoe

定义“无效”。你得到什么错误?什么不起作用?重置按钮一直是HTML表单的一部分,它们起作用。
RobG

1
“无效”-它不会重设任何内容,在表单中未看到任何更改。
yvonnezoe 2013年

1
需要注意的是,“重置”并不意味着“我的表格已清除”。实际上,“重置”的语义是将所有“表单”元素返回其原始“值”属性。至少让我困惑了几分钟!
jocull

@jocull-其他所有方法均失败时,总是存在W3CWHATWG版本的HTML标准。;-)
RobG

21

我终于解决了问题!@RobG对form标记和table标记是正确的。form标签应放置在表外。接着就,随即,

<td><input type="reset" id="configreset" value="Reset"></td>

不需要jquery或其他任何东西就可以工作。只需单击按钮,然后tadaa〜整个表单将被重置;)辉煌!


3
您通常可以通过检查源代码来确认这种情况的发生(不查看页面源代码,因为它将显示所生成的内容,而是使用开发人员工具<kbd> F12 </ kbd>之类的东西),该代码向您显示“浏览器看到” -在这种情况下,它会告诉你(在Chrome中,至少),该form标签已被自动关闭在的开头tbody,不包括输入元素。
drzaus



13

通过使用jQuery函数.closest(元素).find(...)

获取元素并寻找元素。

最后,执行所需的功能。

$("#form").closest('form').find("input[type=text], textarea").val("");

4
尽管此代码块可以回答问题,但您始终应提供为什么这样做的解释。
Sascha Wolf

1
$("#form").find("input[type=text], textarea").val("");我这样做了
比拉

11

第一行将重置表单输入

$('form#myform').trigger("reset"); //Line1
$('form#myform select').trigger("change"); //Line2

第二个将重置select2

可选:如果您在不同的事件中注册了不同的类型,则可以使用此功能

$('form#myform select, form input[type=checkbox]').trigger("change"); //Line2


4

您可以像这样添加输入类型=重置ID =重置表单

<html>
<form>
<input type = 'reset' id = 'resetform' value = 'reset'/>
<!--Other items in the form can be placed here-->
</form>
</html>

然后使用jquery,只需对id = resetform的元素使用.click()函数,如下所示

<script> 
$('#resetform').click();
</script>

注意:您还可以使用CSS隐藏ID = resetform的reset按钮。

<style>
#resetform
{
display:none;
}
</style>

不要原谅隐藏它...使其更现代。<input type ='reset'id ='resetform'value ='reset'/ style ='display:none;'>
mangas

3

这是使用Jquery的简单解决方案。它在全球范围内运作。看一下代码。

$('document').on("click", ".clear", function(){
   $(this).closest('form').trigger("reset");
})

在您需要重置按钮的每种形式的按钮中添加清除类。例如:

<button class="button clear" type="reset">Clear</button>

3

jQuery没有reset()方法。但是原生JavaScript可以。因此,可以使用以下任一方法将jQuery元素转换为JavaScript对象:

$("#formId")[0].reset();

$("#formId").get(0).reset();

我们可以简单地使用Javascript代码

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

2
<button type="reset">Reset</reset>

我认为最简单的方法就是强大。放置在表单标签内。


1

您可以使用以下内容。

@using (Html.BeginForm("MyAction", "MyController", new { area = "MyArea" }, FormMethod.Post, new { @class = "" }))
{
<div class="col-md-6">
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">
        @Html.LabelFor(m => m.MyData, new { @class = "col-form-label" })
    </div>
    <div class="col-lg-9 col-md-9 col-sm-9 col-xs-12">
        @Html.TextBoxFor(m => m.MyData, new { @class = "form-control" })
    </div>
</div>
<div class="col-md-6">
    <div class="">
        <button class="btn btn-primary" type="submit">Send</button>
        <button class="btn btn-danger" type="reset"> Clear</button>
    </div>
</div>
}

然后清除表格:

    $('.btn:reset').click(function (ev) {
        ev.preventDefault();
        $(this).closest('form').find("input").each(function(i, v) {
            $(this).val("");
        });
    });

这里似乎有很多特定于框架的代码。我建议在回答SO问题时避免使用此类方法,因为该问题未指定除jQuery之外,他们没有使用任何其他框架
Lazerbeak12345

0

您的代码应该可以工作。确保static/jquery-1.9.1.min.js存在。另外,您可以尝试还原为static/jquery.min.js。如果这样可以解决问题,那么您已经找到了问题所在。


我能想到的唯一另一个问题是您有另一个具有相同ID(configform)的表单。您应该使用控制台进行一些调查。首先尝试$。如果您使用的是Chrome浏览器,则$在加载jQuery的情况下,在控制台中键入将激活上下文相关列表。如果键入$并按回车键,则在加载jQuery时它将评估为一个函数。下次尝试$("#configform")。右键单击结果,然后选择Reveal in Elements panel
ic3b3rg

谢谢:)但我没有铬。使用萤火虫的方法是否相同?(我已经安装了它,但之前从未使用过)
yvonnezoe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.