You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JS函数控制HTML表单提交按钮,仅全部验证通过才可提交

实现方案

1. 调整HTML代码

原有代码缺少表单<form>容器,且下拉选的部分选项没有配置value属性,会导致取值异常,修改后代码如下:

<form id="applyForm">
  <input id="Degree" name="Degree" type="number" size="10">
  <select id="year" name="date">
    <option value="2000"> 2000 </option>
    <option value="2001"> 2001 </option>
    <option value="2002"> 2002 </option>
    <option value="2003" selected> 2003 </option>
    <option value="2004"> 2004 </option>
    <option value="2005"> 2005 </option>
  </select>
  <button type="submit">提交表单</button>
</form>

2. 重写JavaScript逻辑

核心逻辑是新增变量存储各字段的校验状态,所有校验通过才允许表单提交,代码如下:

// 校验状态存储
let isYearValid = true;
let isDegreeValid = true;
let delayTimer;

const yearSelect = document.getElementById('year');
const degreeInput = document.getElementById('Degree');
const form = document.getElementById('applyForm');

// 年份校验
yearSelect.addEventListener('change', function() {
  const year = Number(this.value);
  if (year < 2003) {
    alert("You are too old");
    isYearValid = false;
  } else {
    isYearValid = true;
  }
})

// 学位值防抖校验
degreeInput.addEventListener('input', (e) => {
  clearTimeout(delayTimer);
  delayTimer = setTimeout(() => {
    const degree = Number(e.target.value);
    if (degree < 73) {
      alert("your degree is less than required");
      isDegreeValid = false;
    } else {
      isDegreeValid = true;
    }
  }, 1050);
});

// 表单提交拦截
form.addEventListener('submit', function(e) {
  // 提交前主动触发一次全量校验,避免用户未修改字段直接提交的场景
  const currentYear = Number(yearSelect.value);
  isYearValid = currentYear >= 2003;
  const currentDegree = Number(degreeInput.value);
  isDegreeValid = currentDegree >=73;

  // 校验不通过阻止提交
  if (!isYearValid) {
    alert("年份不能小于2003");
    e.preventDefault();
    return;
  }
  if (!isDegreeValid) {
    alert("学位值不能小于73");
    e.preventDefault();
    return;
  }
  // 所有校验通过,表单正常提交
})

可选优化

如果不需要弹窗提示,可自行替换为页面内嵌入的错误提示文案,用户体验更好。

内容的提问来源于stack exchange,提问作者OWL Majedah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:15:03