jQuery Validate - 如果另一个字段小于某个数字,则需要选择某个单选按钮

时间:2013-08-30 17:29:57

标签: jquery jquery-validate

我有一个人的年龄的下拉菜单,如果这个人的年龄低于85岁,我需要在我的“current_health”单选按钮上需要一定的值才能继续。我使用jQuery validate插件和表单向导插件,允许我让用户一次浏览表单2个问题。用户填写这2个问题,然后单击“下一步”并检查验证。

我尝试了许多补救措施,这就是我现在所拥有的:

var validator = $("#order-form").validate({
            errorContainer: container,
            errorLabelContainer: $("ul", container),
            wrapper: 'li',
            meta: "validate",
            rules: {
                current_health: {
                    equalTo: "#requiredUnder85",
                    required:{
                        depends: function(element){
                            return $("#age").val() < 85;
                        }
                    }
                }
            }
        });

“requiredUnder85”是一个隐藏字段,其文本等于需要检查验证通过的单选框的值。

如果年龄< 85,current_health需要匹配“终末/慢性疾病”,否则无论current_health是什么都无关紧要。这是我需要验证的。 Age是一个选择框,current_health是一个单选按钮集。

我一直在寻找帮助,但我无法达到我的需要。任何帮助表示赞赏

编辑:包括表单标记。 (注意:我也在使用smarty,你可以看到)

<label for="age">What is your current age?</label><br/>        
<select id="age" name="age" {literal} class="input-required {validate:{required:true}}" title="Required"{/literal}>
    <option value=""></option>
    {include file='snippets/age.tpl'}
</select><br/><br/>

<label for="current_health">Choose the most applicable health status</label><br/>
<input type="radio" name="current_health" id="ch1" value="Healthy" {if $data.current_health eq 'Healthy' OR !isset($data.current_health)}checked="checked"{/if} />  Healthy<br/>
<input type="radio" name="current_health" id="ch2" value="Terminal/Chronic Illness" {if $data.current_health eq 'Terminal/Chronic Illness'}checked="checked"{/if}/> Terminal/Chronic Illness

编辑2 :添加自定义规则后,如果条件不满足,我将无法再在表单向导中前进,但我没有显示任何错误消息。

var validator = $("#order-form").validate({
    errorContainer: container,
    errorLabelContainer: $("ul", container),
    wrapper: 'li',
    meta: "validate",
    rules: {
        current_health: {
            ageAndHealth: true
        }
    }
});

jQuery.validator.addMethod("ageAndHealth", function(value, element, parameter) {
    if($('#age').val() < 85 && value != "Terminal/Chronic Illness"){
        return false;
    }
    return true;
}, "This is the error message");

1 个答案:

答案 0 :(得分:1)

听起来你只需要为这种情况创建自定义方法/规则......

请参阅:http://jqueryvalidation.org/jQuery.validator.addMethod/

jQuery.validator.addMethod("myRule", function(value, element, parameter) {
    // your function for evaluating the element's validity
    // return true when it passes
    // return false when it fails and message will automatically display
}, "This is the error message");

这些参数传递给你的函数:

<强>值
类型:字符串
验证元素的当前值

<强>元素
类型:元素
要验证的元素

<强>参数
类型:字符串
为该方法指定的参数,例如对于min:5,参数为5,对于范围:[1,5]它是[1,5]


像任何其他规则一样定义它......

rules: {
    current_health: {
        myRule: true
        // myRule: 85 // alternatively, you could pass parameters to your function
    }
}