即使未填写必填字段,我也可以提交超时表单

问题描述

我想知道是否可以在一定时间段(例如2分钟)后提交表格,即使没有填写所有必填字段,我希望在该固定时间段内输入所有数据提交。当前,尽管我使用的是基于JavaScript的超时功能,但由于未填写必填字段,因此不允许在超时时提交表单。我将所有字段都设置为必填,因为自动对焦功能如果不是必填字段,则似乎无法正常工作(即在当前字段中按Enter键后不会自动进入下一个输入字段。是否可以解决此问题?这么多的帮助!

window.setTimeout(() => this.submit(),120000)
<html>
 <main>
  <form>

     <br><label for="response1"><b>Animals</b></label><br>
     <input type="text" id="response1" name="response1" autocomplete="off" autofocus required></br>

     <br><input type="text" id="response2" name="response2" autocomplete="off" autofocus required></br>

     <br><input type="text" id="response3" name="response3" autocomplete="off" autofocus required></br>

     <br><input type="text" id="response4" name="response4" autocomplete="off" autofocus required></br>
     
   <button type="submit">Submit</button>
  </form>
 </main>
</html>

解决方法

当然,只需将此逻辑放入您的函数中即可。您只需从字段中删除required属性即可。

let form = document.querySelector('form');
let inputs = form.getElementsByTagName('input');
let i;

for (i = 0; i < inputs.length; i++) {
    inputs[i].required = false;
}
,

您的代码有几个问题:

  1. 您不应打开和关闭br标签,只需将<br>放在要换行的位置
  2. 仅应将autofocus属性放在一个输入上,并且在页面加载时该输入将具有焦点。
  3. 根据您调用代码的方式,您可能会遇到this关键字的问题,最好直接调用该表单。

我在您的代码中更改了这些内容,并成功完成了以下代码(无需删除所需的属性,但是如果确实不需要它们,则将其删除):

window.setTimeout(() => document.forms[0].submit(),1000)
<html>
<main>
<form>
    <br>
    <label for="response1">
        <b>Animals</b>
    </label>
    <br>
    <input type="text" id="response1" name="response1" autocomplete="off" autofocus required>
    <br>
    <input type="text" id="response2" name="response2" autocomplete="off" required>
    <br>
    <input type="text" id="response3" name="response3" autocomplete="off" required>
    <br>
    <input type="text" id="response4" name="response4" autocomplete="off" required>
    <button type="submit">Submit</button>
</form>
</main>

</html>

我将超时时间更改为一秒,以便能够看到效果。