Javascript 如何在jQuery中检查表单循环中是否选中了单选按钮和复选框?
我正在制作我的第一个js插件来验证html表单。我已经为文本字段找到了答案,但在选择验证单选按钮和复选框的最佳方法时遇到了一些问题。由于可以有多个单选组,每个组都有许多单选按钮。我所做的是围绕表单元素循环,如下所示Javascript 如何在jQuery中检查表单循环中是否选中了单选按钮和复选框?,javascript,jquery,html,jquery-plugins,jquery-validate,Javascript,Jquery,Html,Jquery Plugins,Jquery Validate,我正在制作我的第一个js插件来验证html表单。我已经为文本字段找到了答案,但在选择验证单选按钮和复选框的最佳方法时遇到了一些问题。由于可以有多个单选组,每个组都有许多单选按钮。我所做的是围绕表单元素循环,如下所示 _self.on("submit", function(event) { console.log('form submitted '); _self.find('.'+settings.errorClass).each
_self.on("submit", function(event) {
console.log('form submitted ');
_self.find('.'+settings.errorClass).each(function(){
let type = $(this).attr('type');
let val = $(this).val();
validate(type, val);
});
validate = function(type, val) {
console.log(type);
switch (type) {
case 'text':
validateText(val);
break;
case 'radio':
validaRadio(val);
break;
case 'checkbox':
validaCheckbox(val);
break;
default:
}
现在在上面的代码中,validaRadio函数是为每个组中我不想要的每个单选按钮调用的。我想按组(名称)验证单选按钮。因此,如果有两个单选组,每个组有四个单选按钮,则每个单选组应调用validateRadio函数两次,而不是八次。
如果你们有更好的方法来解决上述问题,请告诉我。你们的方法没有必要。您所要做的就是为每组单选按钮获取一个集合,并检查选中项目的
长度
,看看该长度是否为0
var-groups=Array.prototype.slice.call(document.queryselectoral(“fieldset”);
//设置检查有效性的事件回调
document.querySelector(“按钮”).addEventListener(“单击”,函数)(){
console.clear();
//在按钮组上循环(每个组在某种容器元素中-此处为字段集)
组。forEach(函数(g){
//在container元素中查找组中选中的按钮
//并查看选中按钮的数量是否为零
if(g.querySelectorAll(“输入[name^='group']:选中”).length==0{
//如果是,则在该组中未选择任何项
log(“您必须在“+g.dataset.group”中选择一个选项);
}
});
});代码>
一
二
三
四
一
二
三
四
选中
为已发送给验证器的名称创建一个checkedRadioNames
数组。如果有一个单选按钮的名称已经过验证,请跳过它
_self.on("submit", function(event) {
console.log('form submitted ');
const checkedRadioNames = [];
_self.find('.'+settings.errorClass).each(function(){
const type = $(this).attr('type');
const val = $(this).val();
if (type === 'radio') {
const name = $(this).attr('name');
if (checkedRadioNames.includes(name)) return;
validaRadio(val, name);
} else validate(type, val);
});
谢谢你的回答,但我不希望我的插件依赖于表单结构,因为它可以被任何人使用,而不管表单是什么HTML。我正在考虑你建议的相同方法。但这是最好的办法吗??我是说其他验证插件是如何处理单选按钮和复选框的?我试着尽可能地遵循你的一般方法,但是,如果您确实希望确保每个输入区域都检查了某个内容,那么简单地迭代每个单选/复选框名称,并检查每个名称是否有一个带有:checked
属性的元素,会更加优雅。(我不知道你的validaRadio
和这些方法实际上在检查什么)假设我有一个单选组要验证,形式是6个单选按钮,其中第三个单选按钮被选中,所以如果我迭代每个单选按钮,那么即使在找到第三个选中的元素后,循环也会转到其他元素进行检查,但我不希望这样。因为表单中可以有多个无线电组。所以,如果我迭代所有的无线电,那么我将如何打破循环(当检查发现时),并知道哪些无线电组已检查无线电,而不需要显示错误消息?您的目标是什么?您是否正在尝试确保所有无线电字段都已检查?用一个集合计算必填字段的数量,然后检查[class=“required”]:已检查的元素(例如)的数量是否相等。