在表单验证的 submithandler ajax 中得到 Uncaught TypeError: form.serialize is not a function

Posted

技术标签:

【中文标题】在表单验证的 submithandler ajax 中得到 Uncaught TypeError: form.serialize is not a function【英文标题】:In form validate's submithandler ajax getting Uncaught TypeError: form.serialize is not a function 【发布时间】:2018-02-15 07:22:24 【问题描述】:

在控制台中出现此错误 Uncaught TypeError: form.serialize is not a function 。如何在表单验证提交处理程序的 ajax 中修复此错误?

$('#form').validate(
                errorClass:  'fieldError',
                onkeyup:     false,
                onblur:      false,
                errorElement:'label',

                submitHandler: function(form) 
                    $.ajax(
                        url: form.action,
                        type: form.method,
                        data: form.serialize(),
                        success: function(response) 
                            if (response == false)
                            alert('could not submit!')
                        

                    );

                
            );

【问题讨论】:

使用 $('#form').serialize() 仅供参考 - 没有名为 onblur 的选项。最接近的选项称为onfocusout 【参考方案1】:

根据 jQuery validate 插件的 documentationsubmitHandler 回调将本机表单作为唯一参数。

原生表单没有 serialize() 方法,因为它是一个 jQuery 方法。 您必须将本机表单包装在 $()

submitHandler: function(form) 

    var $form = $(form);

    $.ajax(
        url     : $form.attr('action'),
        type    : $form.attr('method'),
        data    : $form.serialize(),
        success : function(response) 
            if (response == false) 
                alert('could not submit!')
            
        );
    );
);

【讨论】:

我已经尝试过这个解决方案,但我是这样做的 var $form = $(this);所以得到另一个例外。现在修复了此解决方案的 +1。谢谢先生! @Haroon,在submitHandler 中,$(this) 是验证器对象,而不是表单。

以上是关于在表单验证的 submithandler ajax 中得到 Uncaught TypeError: form.serialize is not a function的主要内容,如果未能解决你的问题,请参考以下文章

防止表单在 jQuery Validate 插件的 submitHandler 函数中提交

jQuery 验证插件:无法在 submitHandler 中调用默认提交

Jquery validate(submitHandler函数)验证通过发送Ajax

jQuery插件Validate验证提交表单submitHandler更改错误信息显示的位置requiredValidator内置验证方式表validate ()的可选项汇总

jQuery Validate SubmitHandler 与 Ajax 提交没有被击中

在 jquery submitHandler 中从 input=file 传递值 [重复]