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

为何点击提交按钮需两次才生效?表单验证逻辑问题求助

问题原因

你这个问题的核心在于点击事件的绑定时机错误:

  • 你把#submit的click事件绑定逻辑放在了invalid事件的处理函数内部,只有当浏览器触发invalid事件(也就是第一次提交表单、检测到必填项为空时),才会给按钮绑定点击事件。
  • 第一次点击提交时,click事件还没被绑定,自然不会执行弹窗逻辑;等invalid事件触发后,click事件才完成绑定,第二次点击时才会触发弹窗。
解决方案

把click事件的绑定逻辑从invalid事件处理函数中分离出来,直接在页面加载完成后绑定,同时保留invalid事件阻止默认提示的逻辑即可:

// 阻止浏览器默认的invalid提示框
document.addEventListener('invalid', function(e) {
  e.preventDefault();
}, true);

// 页面加载完成后就绑定submit按钮的点击事件
$(function() {
  $('#submit').on("click", function() {
    let valid = true;
    $('[required]').each(function() {
      if ($(this).is(':invalid') || !$(this).val()) valid = false;
    });
    if (!valid) {
      swal({
        title: "Good job",
        text: "You clicked the button!",
        type: "success"
      });
    }
  });
});
关键说明
  • invalid事件只负责阻止浏览器自带的必填项提示,不需要在这里处理提交逻辑
  • 点击事件绑定在页面初始化阶段($(function(){})就是jQuery的DOM加载完成事件),确保按钮一开始就有点击事件监听,第一次点击就能执行校验和弹窗逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:45:30