我有一个比较两个字段的函数。
$.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插件完成这个。
答案 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中,你将txtLastName
与txtFirstName
与>
比较运算符进行比较......究竟一个名字怎么可能是"大于"另一个?
编辑2
Your jsFiddle因为...而被打破了
您要按id
定位字段,但您的字段只包含name
而不包含id
。
将$('#fieldname')
更改为$('[name="fieldname"]')
,以name
为目标。
您正在使用比较运算符比较两个字符串,这将始终失败,因为字符串不是数字。您需要parseInt()
将字符串转换为整数才能进行比较......
parseInt($('[name="fieldname"]').val())