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

AJAX校验通过后调用$(form).submit()无法触发表单提交问题

问题根因

表单无法提交的核心原因有两个:

  • jQuery封装的$form.submit()方法触发逻辑存在兼容问题:调用该方法时会先执行所有绑定在表单上的submit事件回调,再判断是否执行原生提交。你的逻辑中首次提交时调用了e.preventDefault()阻止默认提交,后续ajax校验完成后通过jQuery触发submit事件,虽然能进入校验通过分支打印validated日志,但jQuery内部的默认行为标记没有被正确重置,最终不会触发原生表单提交请求,控制台也不会报任何错误。
  • 代码存在逻辑疏漏:if ($validate.length==0)判断块未添加大括号,导致仅第一行append隐藏域的逻辑受if条件控制,后续的字段查找、参数序列化、ajax请求逻辑,无论_validate字段是否存在都会执行,会造成无意义的逻辑重复运行。
修复方案

校验通过后直接调用原生DOM的submit方法即可,原生方法不会触发绑定的jQuery submit事件,会直接执行表单提交动作,同时补上if块的大括号修正逻辑:

$(document).ready(function(){
    $('form[action*="#validate"]').on('submit', function(e){
        var $form = $(this);
        var $submit = $form.find('input[type=submit]');
        var $validate = $form.find('input[name=_validate]');
        if ($validate.length>0 && $validate.val()=='success') {
            console.log('validated');
            return true;
        }
        e.preventDefault();

        // 补上大括号,仅在_validate字段不存在时执行新增逻辑
        if ($validate.length==0) {
            $form.append('<input type="hidden" name="_validate" value="asking" />');    
            $validate = $form.find('input[name=_validate]');
        }
        var params = $form.serialize();
        $.ajax({
            url: $form.attr('action'),
            method: $form.attr('method').toLowerCase(),
            data: params
        })
        .then(function(response, statusText, xhrObj){
            var json = JSON.parse(response);
            if (json._status!='ok') {
                // 写入校验错误提示逻辑
            } else {
                $validate.val('success');
                $form.attr('action', $form.attr('action').replace('#validate', ''));
                // 替换为原生DOM submit方法,直接触发提交,不重复走jQuery事件绑定
                $form[0].submit();
            }
        }); 
    });
});

额外注意:请确保表单内的提交按钮(type=submit的input/button)的id和name都不要设置为submit,否则会覆盖表单原生的submit方法,同样会导致提交失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:09:24