Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQuery中检查表单循环中是否选中了单选按钮和复选框?_Javascript_Jquery_Html_Jquery Plugins_Jquery Validate - Fatal编程技术网

Javascript 如何在jQuery中检查表单循环中是否选中了单选按钮和复选框?

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

我正在制作我的第一个js插件来验证html表单。我已经为文本字段找到了答案,但在选择验证单选按钮和复选框的最佳方法时遇到了一些问题。由于可以有多个单选组,每个组都有许多单选按钮。我所做的是围绕表单元素循环,如下所示

 _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”]:已检查的
元素(例如)的数量是否相等。