根据彼此的价值要求字段

时间:2013-01-24 20:29:51

标签: jquery jquery-validate

Screenshot

我有上面的字段,我想要求他们为至少一个输入大于0的值,但他们也可以有桌子和座位。

我的HTML:

   <div class="form-row reserve">
    <input type="text" name="tables" id="tables" value="0"/>
        <label for="tables">corporate tables (10 seats) @ $1,950 each and/or</label>
   </div>
   <div class="form-row reserve">
    <input type="text" name="individual" id="individual" value="0"/>
        <label for="individual">individual seats @ $225 each</label>
   </div>

我已经尝试了这个并且它似乎不起作用:

tables: {
    required: function(element){
        return $("#individual").val() == 0;
    }
},

individual: {
    required: function(element){
        return $("#tables").val() == 0;
    }
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你不能在rule内使用这样的功能。 required:通常只接受truefalse。但是,您也可以使用depends来指定true/false rule内的函数...

rules: {
    tables: {
        required: {
            depends:  function(element) {
                return $("#individual").val() === 0;
            }
        }
    }
}

但是,使用上述内容,您的表单将始终通过验证,因为这两个字段永远不会为空(它们包含“0”)。因此,始终满足required规则。请参阅:http://jsfiddle.net/vcnt9/

您无法通过从两个字段中删除0的默认值来解决此问题,因为永远不会满足depends函数,并且字段只是保持可选。请参阅:http://jsfiddle.net/vcnt9/1/

或者,您无法通过将depends应用于min: 1规则来解决此问题,因为它只允许使用truefalse的规则。< / p>


对于这两个字段,最佳解决方案是use addMethod to create your own rule。使用“小于或等于”运算符(<=)来排除负数。

$.validator.addMethod("myMethod", function (value, element) {
    if (($("#individual").val() <= 0) && ($("#tables").val() <= 0)) {
        return false;
    } else {
        return true;
    }
}, "Please enter at least one field");

工作演示:http://jsfiddle.net/v4UGM/