36

根据我对该主题所做的搜索,我尝试了几种不同的方法,但由于某种原因,我无法让它工作。我只想在我点击提交按钮后清除我的文本输入和文本区域。

这是代码。

<div id="sidebar-info">
    <form name="contact-form" action="formprocess.php" method="post" target="ninja-frame">
        <h1>By Phone</h1>
        <p id="by-phone">XXX-XXX-XXXX</p>
        <h1>By Email</h1>
        <p id="form-row">Name</p>
        <input name="name" id="name" type="text" class="user-input" value="">
        <p id="form-row">Email</p>
        <input name="email" id="email" type="text" class="user-input" value="">
        <p id="form-row">Message</p>
        <textarea name="message" id="message" class="user-input" rows="10" maxlength="1500"></textarea>
        <p>*Please fill out every field</p>
        <input type="submit" value="Submit" id="submit" onclick="submitForm()">

        <script>
            function submitForm() {
            document.contact-form.submit();
            document.contact-form.reset();
            }
        </script>
    </form>
</div>
4

11 回答 11

50

您的表单已被提交,因为您的按钮是 type submit。在大多数浏览器中,这会导致表单提交和加载服务器响应,而不是在页面上执行 javascript。

将提交按钮的类型更改为button. 另外,由于这个按钮被赋予了 id submit,它会导致与 Javascript 的提交函数发生冲突。更改此按钮的 id。尝试类似的东西

<input type="button" value="Submit" id="btnsubmit" onclick="submitForm()">

这种情况下的另一个问题是表单的名称包含-破折号。但是,Javascript 翻译-为减号。

您将需要使用基于数组的表示法或使用document.getElementById()/ document.getElementsByName()。该getElementById()函数直接返回元素实例,因为 Id 是唯一的(但它需要设置 Id)。getElementsByName()返回具有相同名称的值的数组。在这种情况下,由于我们没有设置 id,我们可以使用getElementsByName索引为 0 的。

尝试以下

function submitForm() {
   // Get the first form with the name
   // Usually the form name is not repeated
   // but duplicate names are possible in HTML
   // Therefore to work around the issue, enforce the correct index
   var frm = document.getElementsByName('contact-form')[0];
   frm.submit(); // Submit the form
   frm.reset();  // Reset all form data
   return false; // Prevent page refresh
}
于 2013-01-29T18:00:57.833 回答
14

由于您使用的是jquery图书馆,我建议您使用该reset()方法。

首先,给form标签添加一个id属性

<form id='myForm'>

然后在完成后,将您的输入字段清除为:

$('#myForm')[0].reset();
于 2017-11-09T09:56:55.770 回答
4

你可以试试这个:

function submitForm() {
  $('form[name="contact-form"]').submit();
  $('input[type="text"], textarea').val('');
}

此脚本需要在页面上添加 jquery。

于 2013-01-29T18:01:01.657 回答
3

最简单的方法是设置表单元素的值。如果您使用的是 jQuery(我强烈推荐),您可以轻松地做到这一点

$('#element-id').val('')

对于表单中的所有输入元素,这可能有效(我从未尝试过)

$('#form-id').children('input').val('')

请注意, .children 只会找到向下一级的输入元素。如果您需要找到孙子或这样的 .find() 应该可以工作。

可能有更好的方法,但这应该适合你。

于 2013-01-29T18:01:14.477 回答
2
$('#contact-form input[type="text"]').val('');
$('#contact-form textarea').val('');
于 2013-01-29T18:01:14.980 回答
1

我在 jQuery 中使用了以下内容:

$("#submitForm").val("");

submitFormhtml中输入元素的id在哪里。我在我的函数之后运行它以从输入字段中提取值。下面的 extractValue 函数:

function extractValue() {
    var value = $("#submitForm").val().trim();
    console.log(value);
};

另外不要忘记包含preventDefault();阻止提交类型表单刷新页面的方法!

于 2018-11-18T18:47:19.317 回答
1

只需在函数末尾包含这一行:

document.getElementById("btnsubmit").value = "";
于 2020-05-06T06:10:30.503 回答
1
var btnClear = document.querySelector('button');
var inputs = document.querySelectorAll('input');
 
btnClear.addEventListener('click', () => {
    inputs.forEach(input =>  input.value = '');
});
于 2020-06-23T13:22:53.667 回答
1

你可以HTMLFormElement.prototype.reset根据MDN使用

document.getElementById("myForm").reset();
于 2020-12-21T23:06:06.887 回答
1

您可以分配给onsubmit属性:

document.querySelector('form').onsubmit = e => {
   e.target.submit();
   e.target.reset();
   return false;
};

https://developer.mozilla.org/docs/Web/API/GlobalEventHandlers/onsubmit

于 2021-07-29T12:19:11.370 回答
0

btnSave.addEventListener("click", () => {
  inputs.forEach((input) => (input.value = ""));
});

**点击后使用要清除输入的按钮而不是 btnSave **

于 2021-10-01T12:37:02.953 回答