← jQuery change()事件:捕获表单元素的值变化 jQuery keydown()事件:键盘按下的瞬间响应 →

jQuery submit()事件:拦截和控制表单提交

原创 2026-04-30 jQuery 已有人查阅

submit() 是表单处理流程里比较关键的一个事件方法。它专门绑定在 <form> 元素上,在用户提交表单的那一刻触发。提交的方式有两种:点击提交按钮,或者在表单输入框获得焦点时按回车键。无论哪种方式,submit 事件都会在数据真正发送之前被触发。

这个时机是前端做表单提交前拦截处理的绝佳位置。可以在 submit 回调里做之后的校验、格式化数据、阻止不合规的提交等。submit() 配合 event.preventDefault() 可以实现“满足条件才放行,不满足就拦截”的逻辑。

语法形式

触发 submit 事件:

$(selector).submit()

程序化地触发表单提交事件。绑定的处理函数会执行,但如果处理函数中有 event.preventDefault(),程序化触发也会被阻止。

绑定 submit 事件:

$(selector).submit(function(event){
    // 表单提交时执行的代码
})

给表单绑定提交事件的处理函数。回调中的 event 参数可以用来调用 event.preventDefault() 阻止表单的默认提交行为。

基础示例:验证特定内容才能提交

下面这个例子演示了 submit() 的拦截用法。用户在输入框中必须输入指定的关键词,点击提交按钮(或按回车)时才会放行,否则显示错误提示并阻止提交。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>submit() 提交验证示例</title>
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
    <style>
        .hint-text {
            color: #2471a3;
            margin-bottom: 6px;
        }
        .msg {
            margin-left: 10px;
            color: #c0392b;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <p class="hint-text">输入 <b>编程学习</b> 才能成功提交表单:</p>
    <form action="javascript:alert('提交成功!')">
        <div>
            <input type="text" id="codeInput" placeholder="请输入关键词">
            <input type="submit" value="提交">
        </div>
    </form>
    <span class="msg" id="feedbackMsg"></span>

    <script>
        $("form").submit(function(event){
            var inputValue = $("input:first").val();
            if(inputValue === "编程学习"){
                $("#feedbackMsg").text("提交成功!").show();
                return; // 验证通过,允许提交
            }
            $("#feedbackMsg").text("输入内容不正确,请重试!").show().fadeOut(2000);
            event.preventDefault(); // 阻止表单提交
        });
    </script>
</body>
</html>

在输入框中随便输入一些文字然后点提交,会看到错误提示闪现 2 秒后消失,表单并不会被提交。当输入正确的关键词“编程学习”并提交时,return 放行,表单正常执行 action 里的 JavaScript 弹窗。

这里 event.preventDefault() 的作用是阻止表单的默认提交流程。如果缺少这行代码,即使显示了错误提示,表单仍然会被提交到服务器。很多初学者在写表单校验时忘了加这一行,结果提示倒是显示了,但数据还是提交出去了。

为什么用 submit 事件而不是按钮的 click 事件

有些开发者会在提交按钮上绑 click 事件来做校验,这样做有两个问题:

  • 按回车提交时 click 事件并不会被触发,校验就被绕过去了。

  • 如果有多个按钮(比如“保存草稿”和“正式提交”),需要分别绑定,逻辑分散。

直接在 form 上绑 submit 更稳妥:不管是点按钮提交还是按回车提交,不管页面上有几个提交按钮,submit 事件都会被统一触发。这是表单校验的推荐做法。

submit 事件的实际应用场景

submit() 在日常开发中的使用频率相当高,常见场景包括:

  • 前端表单校验: 在提交前检查必填项是否填写、格式是否正确,不通过就阻止提交并提示用户。

  • 提交前数据处理: 自动格式化输入内容(如去掉首尾空格)、补充隐藏字段、设置时间戳等。

  • 防止重复提交: 用户点击提交后立即禁用提交按钮,防止网络延迟时重复点击导致多次提交。

  • 异步提交: 阻止默认行为后用 $.ajax() 把表单数据异步发送到服务器,实现无刷新提交。

关于防止重复提交,有一个很实用的处理技巧:

$("form").submit(function(event){
    var $submitBtn = $(this).find("input[type=submit]");
    if($submitBtn.prop("disabled")){
        event.preventDefault();
        return;
    }
    $submitBtn.prop("disabled", true).val("提交中...");
});

提交后立即禁用按钮并修改按钮文字,既能防止用户重复点击,也给出了视觉反馈。请求完成后再把按钮状态恢复。

本节课程知识要点

  • submit() 事件绑定在 <form> 元素上,在表单提交的瞬间触发,不管是通过点击提交按钮还是按回车键。

  • 通过 event.preventDefault() 可以阻止表单的默认提交行为,实现前端拦截和校验。

  • 做表单校验时优先在 form 上绑 submit,而非在提交按钮上绑 click,能覆盖更多提交触发方式。

  • 配合 $.ajax() 可实现无刷新异步提交,配合按钮状态管理可防止重复提交。

  • 程序化调用 .submit() 同样会触发绑定的事件处理函数,可用于自动提交场景。

submit() 是表单提交流程的控制关键。它给开发者提供了在数据真正发送之前进行拦截和处理的机制,结合 event.preventDefault() 可以实现完备的前端校验逻辑。表单相关的事件方法讲到这里——focusblurchangeselectsubmit——已经覆盖了从用户输入、焦点切换、内容选中到最终提交的完整交互链路。掌握这些事件方法,前端表单开发的基本功就比较扎实了。

← jQuery change()事件:捕获表单元素的值变化 jQuery keydown()事件:键盘按下的瞬间响应 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号