我有这样的事情:
<form>
<input name='roles' type='checkbox' value='1' />
<input name='roles' type='checkbox' value='2' />
<input name='roles' type='checkbox' value='3' />
<input name='roles' type='checkbox' value='4' />
<input name='roles' type='checkbox' value='5' />
<input type='submit' value='submit' />
<form>
我想验证是否应该检查至少一个复选框(角色),是否可以使用jquery.validate?
答案 0 :(得分:100)
来自https://github.com/ffmike/jquery-validate
的示例 <label for="spam_email">
<input type="checkbox" class="checkbox" id="spam_email" value="email" name="spam[]" validate="required:true, minlength:2" /> Spam via E-Mail </label>
<label for="spam_phone">
<input type="checkbox" class="checkbox" id="spam_phone" value="phone" name="spam[]" /> Spam via Phone </label>
<label for="spam_mail">
<input type="checkbox" class="checkbox" id="spam_mail" value="mail" name="spam[]" /> Spam via Mail </label>
<label for="spam[]" class="error">Please select at least two types of spam.</label>
仅使用javascript:
在标签中没有字段“验证”$("#testform").validate({
rules: {
"spam[]": {
required: true,
minlength: 1
}
},
messages: {
"spam[]": "Please select at least two types of spam."
}
});
如果你需要不同的输入名称,你可以使用像这样的东西:
<input type="hidden" name="spam" id="spam"/>
<label for="spam_phone">
<input type="checkbox" class="checkbox" id="spam_phone" value="phone" name="spam_phone" /> Spam via Phone</label>
<label for="spam_mail">
<input type="checkbox" class="checkbox" id="spam_mail" value="mail" name="spam_mail" /> Spam via Mail </label>
使用Javascript:
$("#testform").validate({
rules: {
spam: {
required: function (element) {
var boxes = $('.checkbox');
if (boxes.filter(':checked').length == 0) {
return true;
}
return false;
},
minlength: 1
}
},
messages: {
spam: "Please select at least two types of spam."
}
});
我在输入之前添加了隐藏输入,如果没有选中复选框,则将其设置为“required”
答案 1 :(得分:37)
验证插件仅验证当前/焦点元素。因此,您需要向验证程序添加自定义规则以验证所有复选框。与上面的答案类似。
$.validator.addMethod("roles", function(value, elem, param) {
return $(".roles:checkbox:checked").length > 0;
},"You must select at least one!");
关于元素:
<input class='{roles: true}' name='roles' type='checkbox' value='1' />
此外,您可能会发现错误消息显示,还不够。 仅突出显示1个复选框,仅显示1条消息。如果单击另一个单独的复选框,然后返回第二个复选框的有效复选框,则原始复选框仍标记为无效,并且尽管表单有效,仍会显示错误消息。 在这种情况下,我总是使用显示和隐藏错误。验证器然后只负责不提交表单。
您拥有的另一个选项是编写一个函数,该函数会在单击复选框时将隐藏输入的值更改为“有效”,然后将验证规则附加到隐藏元素。这只会在onSubmit事件中验证,但会在适当的时间显示和隐藏消息。这些是您可以使用validate插件的唯一选项。
希望有所帮助!
答案 2 :(得分:11)
嗯,首先你的id属性必须是唯一的,你的代码可能是
<form>
<input class='roles' name='roles' type='checkbox' value='1' />
<input class='roles' name='roles' type='checkbox' value='2' />
<input class='roles' name='roles' type='checkbox' value='3' />
<input class='roles' name='roles' type='checkbox' value='4' />
<input class='roles' name='roles' type='checkbox' value='5' />
<input type='submit' value='submit' />
</form>
对于你的问题:
if($('.roles:checkbox:checked').length == 0)
// no checkbox checked, do something...
else
// at least one checkbox checked...
但请记住,JavaScript表单验证只是指示性的,所有验证都必须在服务器端完成。
答案 3 :(得分:6)
$("#idform").validate({
rules: {
'roles': {
required: true,
},
},
messages: {
'roles': {
required: "One Option please",
},
}
});
答案 4 :(得分:4)
这就是我过去处理过的问题:
$().ready(function() {
$("#contact").validate({
submitHandler: function(form) {
// see if selectone is even being used
var boxes = $('.selectone:checkbox');
if(boxes.length > 0) {
if( $('.selectone:checkbox:checked').length < 1) {
alert('Please select at least one checkbox');
boxes[0].focus();
return false;
}
}
form.submit();
}
});
});
答案 5 :(得分:2)
您很可能希望在复选框旁边显示文字。在这种情况下,您可以将复选框放在标签内,如下所示:
<label style="width: 150px;"><input type="checkbox" name="damageTypeItems" value="72" aria-required="true" class="error"> All Over</label>
<label style="width: 150px;"><input type="checkbox" name="damageTypeItems" value="73" aria-required="true" class="error"> All Over X2</label>
问题在于,当显示错误消息时,它将在复选框之后但在文本之前插入,使其无法读取。为了解决这个问题,我更改了错误放置功能:
if (element.is(":checkbox")) {
error.insertAfter(element.parent().parent());
}
else {
error.insertAfter(element);
}
这取决于你的布局,但我所做的是为复选框控件设置一个特殊的错误位置。我得到复选框的父级,这是一个标签,然后我得到它的父级,在我的情况下这是一个div。这样,错误就位于复选框控件列表下方。
答案 6 :(得分:2)
sir_neanderthal已经发布了一个很好的答案。
我只想指出,如果您想为输入使用不同的名称,您还可以使用(或仅复制方法)来自官方jQuery验证的 require_from_group method additional-methods.js (link to CDN for version 1.13.1)。
答案 7 :(得分:0)
确保input-name[]
在规则集中的引号中。花了我几个小时才弄明白这一部分。
$('#testform').validate({
rules : {
"name[]": { required: true, minlength: 1 }
}
});
在这里阅读更多内容...... http://docs.jquery.com/Plugins/Valid...ets.2C_dots.29
答案 8 :(得分:0)
if ($('input:checkbox').filter(':checked').length < 1){
alert("Check at least one!");
return false;
}