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

HTML表单使用submit类型按钮时IF条件判断逻辑不生效

问题根因

两个异常的本质都是事件绑定和表单默认行为没处理对:

  • 按钮设置type="button"时,按钮本身不具备触发表单提交的能力,只有手动绑定的点击事件会生效,而浏览器默认的「输入框聚焦状态下按回车提交表单」逻辑,只会关联表单内的type="submit"按钮,所以按回车没反应是符合原生规则的。
  • 按钮设置type="submit"时,你把校验逻辑绑在了按钮的onclick事件上,没有拦截表单原生的默认提交动作:点击按钮/按回车触发提交时,表单会优先执行默认提交行为——默认以GET方式提交到当前页面,触发页面刷新。这时候你的校验JS要么还没执行完页面就被重载,要么重载后密码输入框被重置为空,自然会直接走到密码错误的分支。
修复方法

不要把校验逻辑绑在按钮点击事件上,转而监听表单的submit事件,第一时间阻止默认提交刷新行为,再执行密码校验,这样不管是点击按钮还是按回车,都会走同一套校验逻辑,也不会出现页面提前刷新的问题。
修正后的完整代码如下:

HTML部分

<form id="loginForm">
  <label for="pswd">ENTER PASSWORD</label>
  <br>
  <input class="box" type="password" id="pswd">
  <br>
  <input class="confirm" type="submit" value="SUBMIT" />
</form>

JS部分

document.addEventListener('DOMContentLoaded', () => {
  const loginForm = document.getElementById('loginForm');
  const pswdInput = document.getElementById('pswd');
  const CORRECT_PASSWORD = "08012020";

  loginForm.addEventListener('submit', (e) => {
    // 阻止表单默认提交刷新页面的行为
    e.preventDefault();
    // 读取输入值时去掉首尾空格,避免用户误输空格导致校验失败
    const inputPassword = pswdInput.value.trim();
    if (inputPassword === CORRECT_PASSWORD) {
      window.location.href = "index.html";
    } else {
      alert("Password is incorrect, Please try again.");
      // 校验失败后清空输入框并重新聚焦,优化输入体验
      pswdInput.value = '';
      pswdInput.focus();
    }
  })
})

补充提示:这种纯前端写死密码的校验方式没有任何安全性,任何人打开浏览器开发者工具就能看到正确密码,仅适合个人本地测试的小页面使用,正式站点的密码校验必须放到服务端完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:39:26