2014-10-27 153 views
0

我有一个函数比较两个字段。验证后显示错误消息 - jQuery验证

$.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

+0

显示为表单的HTML。另外解释更多关于为什么当页面加载时你触发'.valid()'和你的标题应该是什么意思。验证后显示错误消息是默认行为。 – Sparky 2014-10-27 18:07:45

+0

我正在触发,因为有很多字段和一些字段,我希望验证在页面加载后立即触发。点击提交按钮后不是。 – user2281858 2014-10-27 18:10:04

+0

在窗体加载时,表单加载中的.Valid()将为窗体上的每个字段运行,这就是为什么“测试”显示出来的原因。如果您只想要验证某些内容,则应指定要验证的字段,而不是整个表单。 – tlbignerd 2014-10-27 18:13:25

回答

1

报价OP:

“现在我的问题是测试,一旦出现页面加载的消息应该只出现在现场比较后。”

你写你的自定义方法,如果字段required ...这就是为什么你会立即收到错误消息,而字段仍然是空的。

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

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

现在的自定义方法将不会触发除非东西进入相关领域。


编辑1

虽然我不知道为什么,在你的jsfiddle,你是一个>比较操作比较txtLastNametxtFirstName ...究竟怎么可能一个名字是“大于”另一个?


EDIT 2

Your jsFiddle是因为破...

  1. 你被id定位字段,但是你的字段仅包含一个name没有id。 将$('#fieldname')更改为$('[name="fieldname"]'),以name为目标。

  2. 您正在比较两个字符串与一个比较运算符,它总是会失败,因为字符串不是数字。您需要parseInt()将字符串转换为整数以比较它们...

    parseInt($('[name="fieldname"]').val()) 
    

DEMO:http://jsfiddle.net/h4bf10vt/3/

+0

这是有效的,但即使它是一个合适的(有效)字段 – user2281858 2014-10-27 18:20:29

+0

@ user2281858,也会出现'测试'消息,这是没有意义的,因为当字段有效时从不会显示错误消息;为什么我已经两次要求你在你的问题中显示相关的HTML代码。我会看看你的jsFiddle,但根据本网站的规则,jsFiddle不是在问题本身内显示代码的替代品。 – Sparky 2014-10-27 18:25:58

+0

@ user2281858,我的代码在你的jsFiddle中:http://jsfiddle.net/h4bf10vt/2/〜准确地解释这个失败的原因。 – Sparky 2014-10-27 18:27:53