验证多个选择框,仅选择一个

时间:2014-03-18 09:23:43

标签: jquery jquery-validate

我有多个选择框,用户必须至少选择一个

这是代码

    <select name="c_hotels[hotels][2][single_room]" id="c_hotels_2_single_room" class="c_hotels_select_room" style="width: 70px;" onchange="calculate_hotels_prices();">
    <select name="c_hotels[hotels][2][double_room]" id="c_hotels_2_double_room" class="c_hotels_select_room" style="width: 70px;" onchange="calculate_hotels_prices();">


    <select name="c_hotels[hotels][3][single_room]" id="c_hotels_3_single_room" class="c_hotels_select_room" style="width: 70px;" onchange="calculate_hotels_prices();">
    <select name="c_hotels[hotels][3][double_room]" id="c_hotels_3_double_room" class="c_hotels_select_room" style="width: 70px;" onchange="calculate_hotels_prices();">

对于每个酒店,用户可以选择单人间或双人间

我想验证,因此用户必须至少选择一个复选框

我创建了一个方法

$.validator.addMethod("sel`enter code here`ect_hotel", function(value) {
    var result=false;


    $( ".c_hotels_select_room" ).each(function(){
        var id=$(this).attr("id");                      
        var value=$("#"+id+" option:selected").val();
        if(value)
        {
           var result=true;
        }
    })

    return result;
},"message here);

并动态添加规则

$(".c_hotels_select_room").rules("add", { select_hotel:true});

该规则正在运行,但问题是它将消息放在第一个选择框旁边

我已添加到html

<label style="display:none" for="c_hotels_select_room" class="error">This field is required.</label>

所以在我想要的地方显示这条消息,但它不起作用,并假设它不是带有标签的字段名称。

任何人都可以帮我发消息(我试图避免使用errorPlacement)

2 个答案:

答案 0 :(得分:1)

您尚未说明要放置错误消息的位置,但以下代码存在缺陷......

$(".c_hotels_select_room").rules("add", { select_hotel:true});

根据jQuery Validation插件的工作原理,上面的代码行只会将.rule()方法分配给jQuery选择器中的 第一个匹配的元素

如果要将.rule()方法分配给选择器匹配的所有元素,必须将其包装在jQuery .each()中...

$(".c_hotels_select_room").each(function() {
    $(this).rules("add", { select_hotel:true});
});

修改

.rules()方法的文档:http://jqueryvalidation.org/rules/

代表.rules()

  

&#34; ...返回第一个选定元素的验证规则。&#34;

代表.rules('add')

  

&#34; ...添加指定的规则并返回第一个匹配元素的所有规则。&#34;

代表.rules('remove')

  

&#34; ...删除指定的规则并返回第一个匹配元素的所有规则。&#34;

答案 1 :(得分:0)

 var n= 0;
    jQuery("select").each(function() {
         n = n+ this.value;              
    });
    if (n < 1) { //obviously do all the checking
      alert("Please select any value");
      return false;
    }