Javascript 如何验证表单中每个组至少选中1个复选框?
我正在建立一个页面,用户将能够从一个类别中选择各种商品(如牛奶/水果…) 这是以一种形式完成的 然后,我将它们发送到服务器并进行一些处理Javascript 如何验证表单中每个组至少选中1个复选框?,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我正在建立一个页面,用户将能够从一个类别中选择各种商品(如牛奶/水果…) 这是以一种形式完成的 然后,我将它们发送到服务器并进行一些处理 <div> <div><input type="checkbox" name="milk" value="yogurt1"/>yogurt1</div> <div><input type="checkbox" name="milk" value="yogurt2"/>yog
<div>
<div><input type="checkbox" name="milk" value="yogurt1"/>yogurt1</div>
<div><input type="checkbox" name="milk" value="yogurt2"/>yogurt2</div>
<div><input type="checkbox" name="milk" value="yogurt3"/>yogurt3</div>
</div>
<div>
<div><input type="checkbox" name="fruit" value="apple"/>apple</div>
<div><input type="checkbox" name="fruit" value="pear"/>pear</div>
<div><input type="checkbox" name="fruit" value="melon"/>melon</div>
</div>
....
酸奶1
酸奶2
酸奶3
苹果
梨
甜瓜
....
Q:如何验证用户从每个类别中至少选择了一种产品(即,在列表中检查了1种牛奶项目和至少1种水果项目)?您可以使用伪选择器,如下所示:
if ($(':checkbox[name="milk"]:checked').length > 0) {
alert('Min 1 checked');
}
对于多个组:
if ($(':checkbox[name="milk"]:checked').length == 0 || $(':checkbox[name="fruit"]:checked').length == 0 || ...) {
alert('Please check at least one checkbox from group');
}
您可以使用伪选择器,如下所示:
if ($(':checkbox[name="milk"]:checked').length > 0) {
alert('Min 1 checked');
}
对于多个组:
if ($(':checkbox[name="milk"]:checked').length == 0 || $(':checkbox[name="fruit"]:checked').length == 0 || ...) {
alert('Please check at least one checkbox from group');
}
您应该检查所选值的长度
$(“#检查”)。在(“单击”,函数(){
如果($(“[name=\“milk\”]:选中”).length>0&$(“[name=\“fruit\”]:选中”).length>0){
警惕(“成功”);
}
});代码>
酸奶1
酸奶2
酸奶3
苹果
梨
甜瓜
检查
您应该检查所选值的长度
$(“#检查”)。在(“单击”,函数(){
如果($(“[name=\“milk\”]:选中”).length>0&$(“[name=\“fruit\”]:选中”).length>0){
警惕(“成功”);
}
});代码>
酸奶1
酸奶2
酸奶3
苹果
梨
甜瓜
选中
而不是在验证中硬编码每个复选框名称,您还可以创建一个更动态的解决方案来处理任何名称
下面这个片段演示中的注释最好地解释了我建议的这个过程:
//在dom上执行函数就绪
$(函数(){
//将事件处理程序绑定到表单的“提交”事件
$('#myForm')。关于('submit',函数(e){
//获取表单中的所有复选框
var$checkbox=$(“#myForm input[type=“checkbox”]”);
//创建一个对象,用作复选框名称的映射,以及是否选中其中一个复选框名称
var checkboxMap={};
//遍历所有复选框
$复选框。每个(功能(i、el){
//获取此复选框的名称
var name=el.name;
//如果我们的复选框映射在“name”键处有一个真实值
//然后保留该值,否则根据是否选中此复选框指定一个值
checkboxMap[name]=checkboxMap[name]| | el.checked;
});
//遍历复选框映射中的所有名称
for(checkboxMap中的变量名称){
//如果我们发现一个名称没有真实值,这意味着没有为该复选框选择任何选项
如果(!checkboxMap[名称]){
//发出错误警报并停止提交表单
警报('您必须至少选择一个'+名称);
e、 预防默认值();
返回false;
}
}
});
});代码>
酸奶1
酸奶2
酸奶3
苹果
梨
甜瓜
您还可以创建一个更动态的解决方案来处理任何名称,而不是对验证中的每个复选框名称进行硬编码
下面这个片段演示中的注释最好地解释了我建议的这个过程:
//在dom上执行函数就绪
$(函数(){
//将事件处理程序绑定到表单的“提交”事件
$('#myForm')。关于('submit',函数(e){
//获取表单中的所有复选框
var$checkbox=$(“#myForm input[type=“checkbox”]”);
//创建一个对象,用作复选框名称的映射,以及是否选中其中一个复选框名称
var checkboxMap={};
//遍历所有复选框
$复选框。每个(功能(i、el){
//获取此复选框的名称
var name=el.name;
//如果我们的复选框映射在“name”键处有一个真实值
//然后保留该值,否则根据是否选中此复选框指定一个值
checkboxMap[name]=checkboxMap[name]| | el.checked;
});
//遍历复选框映射中的所有名称
for(checkboxMap中的变量名称){
//如果我们发现一个名称没有真实值,这意味着没有为该复选框选择任何选项
如果(!checkboxMap[名称]){
//发出错误警报并停止提交表单
警报('您必须至少选择一个'+名称);
e、 预防默认值();
返回false;
}
}
});
});代码>
酸奶1
酸奶2
酸奶3
苹果
梨
甜瓜
谢谢你的回答谢谢你的回答谢谢你的回答谢谢你的回答谢谢你的回答