验证后显示错误消息 - jQuery Validate

时间:2014-10-27 18:00:26

标签: javascript jquery jquery-validate

我有一个比较两个字段的函数。

$.validator.addMethod("validatormethod", function (value, element) {
    return $('#Field1').val() > $('#Field2').val()
}, "Test");

表单是动态的,因此使用each验证表单:

$('.validateclass').each(function () {
        $(this).rules('add', {
            validatormethod: true,
            messages: {validatormethod: "Test" }
        })
    });

$('.validateclass2').each(function () {
        $(this).rules('add', {
            required: true,
            messages: {required: "This field is required" }
        })
    });

$('#myForm').valid();

现在我的问题是,一旦页面加载,就会显示消息Test。它应该仅在比较字段后出现。我知道它应该是$('#formSaveComponent').valid();行。但我想在页面加载时显示所需的消息。有没有什么方法可以使用jQuery Validate插件完成这个。

SAMPLE FIDDLE

1 个答案:

答案 0 :(得分:1)

引用OP:

  

"现在我的问题是一旦页面加载就会显示消息Test。它应该仅在比较字段后出现。"

您已经编写了自定义方法,就好像字段是required一样......这就是您立即收到错误消息并且字段仍为空的原因。

只要这些字段不是required,您就需要将this.optional( element ) ||添加到自定义方法中,如下所示...

$.validator.addMethod("validatormethod", function (value, element) {
    return this.optional( element ) || $('#Field1').val() > $('#Field2').val()
}, "Test");

现在,除非在相关字段中输入内容,否则不会触发自定义方法。


编辑1

虽然我不知道为什么,在你的jsFiddle中,你将txtLastNametxtFirstName>比较运算符进行比较......究竟一个名字怎么可能是"大于"另一个?


编辑2

Your jsFiddle因为...而被打破了

  1. 您要按id定位字段,但您的字段只包含name而不包含id。 将$('#fieldname')更改为$('[name="fieldname"]'),以name为目标。

  2. 您正在使用比较运算符比较两个字符串,这将始终失败,因为字符串不是数字。您需要parseInt()将字符串转换为整数才能进行比较......

    parseInt($('[name="fieldname"]').val())
    
  3. DEMO:http://jsfiddle.net/h4bf10vt/3/