jquery中的级联触发器字段验证

时间:2013-02-28 09:06:27

标签: jquery jquery-validate

我有一个带有两个数字输入的表单,比如input1和input2。

我希望有以下验证规则:

  • R1:input2< = input1 * 0.2(当input1或input2值改变时触发)
  • R2:input1< 10

暂时忘记R2并查看此代码:

<input id="input1" class="validation1"/>
<input id="input2" class="validation2"/>

$.validator.addMethod("validation2", function (value, element) {
  var v = Globalize.parseFloat(value);
  var l = Globalize.parseFloat($('#input1').val());
  return !l || !v || v <= l*0.2;
}, "Error");
$.validator.classRuleSettings.validation2= { validation2: true };

$.validator.addMethod("validation1", function (value, element) {
  var validator = $("form").validate();
  validator.element($('#input2'));
  return true;
}, "should never be shown");
$.validator.classRuleSettings.validation1= { validation1: true };

此代码运行良好。 当input1或input2改变时,将调用input2的验证。

所以让我们以这种方式编辑validation1来添加R2:

$.validator.addMethod("validation1", function (value, element) {
  var validator = $("form").validate();
  validator.element($('#input2'));

  var v = Globalize.parseFloat(value);
  return v && v<10;
}, "Input1 must be less than 10");

此代码按预期工作,但一旦input1设置为大于10,它就会变为红色,当值更改为<10时,它也会保持红色。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我无法让您的代码在jsFiddle:http://jsfiddle.net/TcpnH/

中运行

也许你可以构建一个jsFiddle。

有些说明:


1)重要提示:所有输入必须包含name属性,否则此插件将无法按预期运行。即使你没有将name用于jQuery中的任何其他内容,它仍然是必需的。

<input id="input1" name="input1" class="validation1" />

2)如果input1必须小于10,为什么要为此创建一个全新的方法?只需使用内置的max方法/规则即可。 max: 10


3) $.validator.classRuleSettings.validation1= { validation1: true };我在the documentation中没有看到classRuleSettings任何地方,也没有看到目的。

通常,自定义方法/规则将作为class添加到您已经完成的元素上:

<input id="input1" class="validation1" />

否则,宣布为规则:

$('form').validate({
    rules: {
        myfieldname: {
            validation1: true
        }
    }
});