JQuery在不应该提交插件时验证插件';T

JQuery在不应该提交插件时验证插件';T,jquery,jquery-validate,Jquery,Jquery Validate,如果电子邮件无效,如果密码不符合最低要求,或者如果密码和确认密码字段不匹配,我尝试通过打印消息来验证我的表单 为了验证插件是否正常工作,我只测试电子邮件的有效性。无论表单是否有效,在提交表单之前,验证器似乎工作了一秒钟,我似乎不知道为什么 此外,“电子邮件无效”消息也没有打印出来 我已经花了相当长的时间试图解决这个问题,我非常感谢任何建议 提前谢谢 JavaScript: $('#signUpForm').validate({ // initialize the plugin error

如果电子邮件无效,如果密码不符合最低要求,或者如果密码和确认密码字段不匹配,我尝试通过打印消息来验证我的表单

为了验证插件是否正常工作,我只测试电子邮件的有效性。无论表单是否有效,在提交表单之前,验证器似乎工作了一秒钟,我似乎不知道为什么

此外,“电子邮件无效”消息也没有打印出来

我已经花了相当长的时间试图解决这个问题,我非常感谢任何建议

提前谢谢

JavaScript:

$('#signUpForm').validate({ // initialize the plugin
    errorPlacement: function(error, element) {},
    rules: {
        email: {
            required: true,
            email: true
        }
    }
});

$('#signUpForm').submit(function(e){
    e.preventDefault();
    if($(this).valid()){
        $(this).submit();
    }else{
        return false;
    }           
});
表格:


此配置完全错误

$('#signUpForm').validate({ // initialize the plugin
    ....
});

$('#signUpForm').submit(function(e){
    ....     
});
您的
.submit()
处理程序是完全冗余的,并且完全干扰了jQuery验证插件的正确操作,该插件会自动捕获按钮
单击
,并阻止
提交
事件

换句话说,
.submit()
处理程序中的代码在功能上与插件已经在为您执行的操作相同。你不需要它,它正在破坏验证


您的
errorPlacing
回调函数为空,因此将停止显示所有错误消息

errorPlacement: function(error, element) {},

它应该看起来像这样

$('#signUpForm').validate({ // initialize the plugin
    rules: {
        email: {
            required: true,
            email: true
        },
        password: {
            required: true,
            minlength: 8,
            maxlength: 12
        },
        confirmPassword: {
            equalTo: '#signUpPassword'
        }
    }
});
演示:



有关正确用法,请参阅和。

有关正确用法,请参阅和。@Sparky,谢谢您的回复。请查看更新的代码,结果是一样的。您的“更新”代码运行良好:这很奇怪,更新的问题有正确的答案。谢谢Sparky,尽管问题仍然存在。验证工作了一秒钟,然后不管表单是否有效都会提交表单。@AnchovyLegend,您能在JSFIDLE中重现该问题吗?否则,当您“更新”代码时,它在这里工作:尽管我无法在JSFIDLE中复制它。我找到了原因,问题是由于我使用了名为braintree的paypal支付网关,该网关要求某些输入字段不具有
name
属性。相反,输入属性称为
数据树名称
。删除这些输入字段进行测试后,验证工作正常,尽管这些支付网关字段是我的应用程序所必需的,所以我现在有点卡住了:/@AnchovyLegend,恕我直言,这与您在OP中显示的内容无关。但是,我可以告诉您,如果任何输入元素没有唯一的
name
属性,jQuery验证插件将无法工作。这是一个内部的硬编码限制,没有解决办法。@AnchovyLegend,您可以通过编程将数据复制到隐藏的输入元素(每个元素都有一个
名称
)中,然后验证这些隐藏元素。您只需启用隐藏字段的验证(
ignore:[]
),然后使用
errorPlacement
回调函数调整消息位置。
$('#signUpForm').validate({ // initialize the plugin
    rules: {
        email: {
            required: true,
            email: true
        },
        password: {
            required: true,
            minlength: 8,
            maxlength: 12
        },
        confirmPassword: {
            equalTo: '#signUpPassword'
        }
    }
});