0

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

我想要以下验证规则:

  • R1: input2 <= input1 * 0.2(当 input1 或 input2 值改变时触发)
  • R2:输入1 <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 时它也会保持红色。

任何的想法?

4

1 回答 1

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 }; 我在文档classRuleSettings中看不到任何地方,也看不到目的。

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

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

否则,作为规则声明:

$('form').validate({
    rules: {
        myfieldname: {
            validation1: true
        }
    }
});
于 2013-02-28T17:44:18.163 回答