验证至少一个复选框(多组复选框)

时间:2013-12-12 07:26:29

标签: jquery jquery-validate

我知道这已在here中得到解答 但我的html如下所示:

<div >
    <label> <input type="checkbox" name="service_area[]" value="colorado">colorado</label>
    <label> <input type="checkbox" name="service_area[]" value="michigan">michigan</label>
</div>

<div >
    <label> <input type="checkbox" name="fav[]" value="skiing">skiing</label>
    <label> <input type="checkbox" name="fav[]" value="volley">volley</label>
</div>

目标:

  • name必须有数组,在这里:service_area []
  • 必须只显示一条错误消息

如何实现这一目标?
每次我使用带有'[]'名称的jvalidate时,它似乎只反映到第一个元素,而不是所有元素。

UPDATE:

我忘记提到我需要检查多个复选框。
上面更新了html。
所以,rynhe的答案给了我一点启发:

$.validator.addMethod(
  "atleastone",
  function(value, element, params) {
    return $('[name="' + element.name +'"]:checked').size() > 0;
  },
  'at least one');

  rules: {
    'service_area[]': {
      atleastone : true,
    },
    'fav[]': {
      atleastone : true,
    },        

最重要的部分是'service_area[]'。 以上代码适用对我来说很好。 谢谢〜

2 个答案:

答案 0 :(得分:0)

根据validation for at least one checkbox

中的Tats_innit回答

你可以改变这一行

var checkboxes = $('.require-one');

var checkboxes = $('input[name="river[]"]');

根据你的html元素var checkboxes = $('input[name="service_area[]"');

Live Demo

答案 1 :(得分:0)

在这种情况下,您无需添加任何特殊方法。当一个组中的每个复选框共享相同的name时,只需使用required规则即可。由于名称包含括号[],因此请用引号括起来。

$(document).ready(function () {

    $('#myform').validate({
        rules: {
            'service_area[]': {
                required: true
            },
            'fav[]': {
                required: true
            }
        }
    });

});
  • 至少需要service_area[]组中的一个复选框。

  • 至少需要fav[]组中的一个复选框。

我使用errorPlacement选项在每次分组之前移动错误消息,但您可以根据需要进行调整。 See all plugin options

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