使用 jQuery 根据两个不同的规则验证单个文本框 验证会跳过第二条错误消息

Validating a single text box against two different rules with jQuery Validation skips the second error message

考虑以下 HTML:

<form id="frm">
    <input type="text" id="txt" name="txt" />
    <input type="submit" value="click me" />
</form>

我需要使用 jQuery 验证插件 v1.13.1 和 jQuery 1.7.2 根据 2 条不同的规则验证文本框,因此:

$(function(){
    var validator = $('#frm').validate({
        errorPlacement: function (error, element) {
            element.attr('title', error.text());
        }
    });

    $.validator.addMethod('rule1', function (value, element) {
        return value != null && value.length;
    }, 'Rule 1 failed!');

    $.validator.addMethod('rule2', function (value, element) {
        return false;
    }, 'Rule 2 failed!');

    //Assign both rules to the text box.
    $('#txt').rules('add', { rule1: true, rule2: true });

    $('input[type="submit"]').click(function() {
        if(!validator.form()) {
            return false;
        }
    });
});

问题是为什么?这是关联的 JSFiddle。 谢谢。

我不是 100% 确定,但我认为你 运行 遇到的问题是 value.length 不 return null/T/F,它 return 是范围从 0 到任意值,因此规则 1 永远不会生效。

尝试 (value.length > 0) T/F。

默认情况下,jQuery 验证会尝试从元素的 title 属性中读取错误消息(如果存在)。当然,由于您设置 标题中的错误消息,这将成为永久性的。这种奇怪的行为 is apparently deprecated 现在并且很快就会消失。

然而,与此同时,解决方法是在创建验证器时使用 ignoreTitle 选项:

var validator = $('#frm').validate({
    ignoreTitle: true,
    ...
}

在此处查看 fiddle:http://jsfiddle.net/dp5pLr8x/4/