提交后重置 HTML 表单

Posted

技术标签:

【中文标题】提交后重置 HTML 表单【英文标题】:Reset HTML form after submit 【发布时间】:2018-10-05 12:11:19 【问题描述】:

const scriptURL = 'URL'
const form = document.forms['myform']

form.addEventListener('submit', e => 
  e.preventDefault()
  fetch(scriptURL, 
      method: 'POST',
      body: new FormData(form)
    )
    .then(response => console.log('Success!', response))
    .catch(error => console.error('Error!', error.message))
);
<form name="myform">
  <div class="col-md-6 col-sm-6">
    <div class="form-group">
      <label for="email" class="sr-only">Email</label>
      <input name="email" class="form-control" type="email" placeholder="Email" required>
    </div>
  </div>
  <div class="col-md-6 col-sm-6">
    <button type="submit" class="btn btn-default btn-block">Subscribe</button>
  </div>
</form>

处理表单提交后如何重置我的表单?

这是我目前正在做的事情:

 form.addEventListener('submit', e => 
                          e.preventDefault()
                          fetch(scriptURL,  method: 'POST', body: new FormData(form))
                          .then(response => console.log('Success!', response))
                          .catch(error => console.error('Error!', error.message))
                          )
                         $('#myform').reset(); // attempt to reset the form

我搜索了类似的线程并尝试了$('#myform').reset(); 很明显,它不起作用, 我是 javascript 新手,如果有人能指出我在哪里学习此表单相关主题,那就太好了

编辑:表单来源

<form name="myform" id="myform">
    <div class="col-md-6 col-sm-6">
        <div class="form-group">
            <label for="email" class="sr-only">Email</label>
                <input name="email" class="form-control" type="email" placeholder="Email" required>
                </div>
    </div>
    <div class="col-md-6 col-sm-6">
        <button type="submit" class="btn btn-default btn-block">Subscribe</button>
    </div>
            </form>

我尝试了以下建议:

  $('#myform').val(''); // not responding
  $('#myform')[0].reset // not responding
  $('#myform').reset(); // not responding
  $('#myform').get(0).reset(); // not responding

  $('#myform').find("input:not([type="submit"), textarea").val(""); // resetting the whole page with performing submission task

  $('#myform')[0].reset() // not responding
  document.forms['myform'].val(""); // not responding
  document.getElementById('#myform').reset() // not responding

【问题讨论】:

请提供html表单代码! 可能重复:***.com/questions/8701812/… Clear form fields with jQuery的可能重复 可能 jQuery 不够用。 @HarishST 刚刚添加,请查看更新后的问题 【参考方案1】:

试试这个:

$('#myform').find("input:not([type="submit"), textarea").val("");

它将清除您表单的所有数据。但是如果你有预填充的值,你应该使用这个代码:document.getElementById('myform').reset()

注意:使用“myform”作为您的表单 ID 属性。例如:<form name="myform" id="myform">

【讨论】:

清空所有值真的和重置表单一样吗?预填充的值呢? @Delowar 刚刚尝试了您的建议,似乎它正在重置整个页面而不仅仅是表单 如果你有预填充的值,你应该使用这个代码:document.getElementById('myform').reset();【参考方案2】:

你需要获取实际的表单而不是 jQuery 对象:

$('#myform').get(0).reset();

【讨论】:

【参考方案3】:

为了让 javascript 知道要重置什么表单,您需要在表单中添加 id,而不仅仅是一个名称。试试吧,

<form name="myform" id="myform">

【讨论】:

【参考方案4】:

请注意,表单重置会将其恢复到呈现时的原始状态。如果您有预填充字段,这些字段将再次获得该值。除此之外,您还需要解决两件事:

$('#myform') 需要在 HTML 中使用 id="myform" 才能将表单作为 jQuery 对象。 reset() 仅适用于 HTML 表单对象,不适用于 jQuery 对象。将您的电话改为$('#myform')[0].reset()document.getElementById('myform').reset()

【讨论】:

【参考方案5】:

清除表单的一种方法是将值设置为“空”,如下所示:

$('#myForm').val('');

那么表单输入里面就没有值了!

$('#myBtn').click(function () 
  $('#myForm').val('');
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<input type="text" value="hello world" id="myForm">

<button id="myBtn">myBtn</button>

【讨论】:

【参考方案6】:
document.getElementById('#myform').reset() // not responding

你快到了..getElementByID 所以你可以在 ('#myform') 中省略 #

如果您使用document.getElementById('myform').reset();,这将起作用

由于某种原因,reset() 仅适用于纯 JS 的 jquery。

【讨论】:

【参考方案7】:

jQuery 不是所有东西都需要的

<form action='server-script.cgi' onsubmit='this.submit();this.reset();return false;'>
  <blah>...</blah>
</form>

【讨论】:

【参考方案8】:

    获取真实表格$('#myForm')[0].reset()

    您需要在表单中添加一个 id 标签 &lt;form id="myForm"&gt;

如果您只是使用纯 js,您可以使用 document.getElementById('myForm').reset(),但仍然在您的表单中添加一个 id 标签

编辑:评论中指出的更正

【讨论】:

即使使用 id,您的选择器对我来说似乎也是错误的。也使用 .get(0)。如果你真的有使用 jquery 的冲动,至少要保持一致。 你能详细说明你的意思是什么事件吗? 他们没有说事件 ;-)。您的 jQuery 语句并不完全正确。选择器中缺少#,您应该将reset() 作为函数调用。使用[0] 而不是get(0) 没有错:learn.jquery.com/using-jquery-core/faq/…【参考方案9】:

document.getElementById("myform").addEventListener('submit',reset_form);

function reset_form(event) 
  //Your code goes here
  document.getElementById("myform").reset();
<form name="myform" id="myform">
  <div class="col-md-6 col-sm-6">
    <div class="form-group">
      <label for="email" class="sr-only">Email</label>
      <input name="email" id="myform" class="form-control" type="email" placeholder="Email" required>
    </div>
  </div>
  <div class="col-md-6 col-sm-6">
    <button type="submit" class="btn btn-default btn-block">Subscribe</button>
  </div>
</form>

你在找这个吗?并在函数内部进行编码! 或者,如果您不想提交表单,也可以使用按钮 type="button" 而不是“提交”。

【讨论】:

【参考方案10】:

由于form 已声明并在侦听器中重新使用,因此只需对其调用重置即可。

<html>
    <head>
        <script>
            window.onload = function()
                const scriptURL = 'URL';
                const form = document.forms['myform'];

                form.addEventListener('submit', e => 
                    e.preventDefault()

                    fetch(scriptURL, 
                        method: 'POST',
                        body: new FormData(form)
                    )
                    .then(response => console.log('Success!', response))
                    .catch(error => console.error('Error!', error.message));

                    form.reset() //Reset the form
                )
            
        </script>
    </head>

    <body>
        <form name="myform">
            <div class="col-md-6 col-sm-6">
                <div class="form-group">
                    <label for="email" class="sr-only">Email</label>
                    <input name="email" class="form-control" type="email" placeholder="Email" required>
                </div>
            </div>
            <div class="col-md-6 col-sm-6">
                <button type="submit" class="btn btn-default btn-block">Subscribe</button>
            </div>
        </form>
    </body>
</html>

【讨论】:

【参考方案11】:

试试这个:

$('#yourInputID').val('');

这将通过其 ID 重置所选输入。

【讨论】:

【参考方案12】:

原因

当使用 fetch() 获取数据时,您只能从服务器获取响应对象。 fetch.then() 中的 reset() 不会执行。

解决方法

让事情顺利进行的一种方法是,您应该在此之前收集数据并将其保存在某个地方并重置表单,而不是在 fetch 中获取表单数据。

代码

form.addEventListener('submit', e => 
  e.preventDefault()

  const options = 
     method: 'POST',
     body: new FormData(form),
  

  form.reset();

  fetch(scriptURL, options)
    .then(response => console.log('Success!', response))
    .catch(error => console.error('Error!', error.message))
  );

【讨论】:

以上是关于提交后重置 HTML 表单的主要内容,如果未能解决你的问题,请参考以下文章

提交后重置jquery移动表单输入

表单提交后重置textarea的值

表单提交后如何阻止变量重置?

如何在提交表单后使用“加载”更改按钮文本并在以角度提交后重置表单

使用 React Native 提交数据后重置表单中的字段

HTML 表单在提交时重置