JavaScript多重复选框验证不起作用

时间:2015-04-10 18:01:31

标签: javascript forms checkbox

我有一张表格

<form method="post" action="" onsubmit="validate()">
<input type="checkbox" name="del[]" value="1">
<input type="checkbox" name="del[]" value="2">
<input type="checkbox" name="del[]" value="3">
<input type="checkbox" name="del[]" value="4">
<input type="checkbox" name="del[]" value="5">
<button type="submit" class="btn btn-danger btn-lg">delete</button>
</form>

我尝试使用JavaScript进行复选框验证,如果有人不选中复选框,它会显示一条消息,如果人们选中一个或多个复选框, 它会显示确认提醒以确认提交。但我的JavaScript不起作用。表格将在未经验证的情况下提交。

    <script>
    function validate() {
        var checkbox=document.getElementsByName("del[]");
        if (checkbox.checked == null || x == "") {
            alert("Please select!");
            var check=false;
            return false;
        }

        if(check != false && !confirm('confirm submit?')){
            e.preventDefault();
            return false;
        }
        return true;
    }
   </script>

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

这样的内容将确保选中至少一个复选框

document.getElementById('myform').onsubmit = function (e) {
  var checkbox = document.getElementsByName("del[]"),
      i,
      checked;
  for (i = 0; i < checkbox.length; i += 1) {
    checked = (checkbox[i].checked||checked===true)?true:false;
  }

  if (checked == false) {
    alert('Check Something!');
    e.preventDefault();
    return false;
  } else if(confirm('confirm submit?')) {
    alert('done!');
    return true;
  }
}
<form id="myform">
  <input type="checkbox" name="del[]" value="1">
  <input type="checkbox" name="del[]" value="2">
  <input type="checkbox" name="del[]" value="3">
  <input type="checkbox" name="del[]" value="4">
  <input type="checkbox" name="del[]" value="5">
  <button type="submit" class="btn btn-danger btn-lg">delete</button>
</form>

答案 1 :(得分:1)

getElementsByName返回一组对象。该集合没有checked属性,因此失败:

var checkbox = document.getElementsByName("del[]");
if (checkbox.checked == null ...  //error, no "checked" property

一个简单的替代方法是使用document.querySelector查找单个选中的输入:

function validate() {
  var checkbox= document.querySelector('input[name="del[]"]:checked');
  if(!checkbox) {
    alert('Please select!');
    return false;
  }
  else return confirm('confirm submit?');
}

另外,改变这个:

<form method="post" action="" onsubmit="validate()">

......对此:

<form method="post" action="" onsubmit="return validate()">

Fiddle

答案 2 :(得分:0)

另一种简单的方法是在加载表单时和单击提交按钮时创建并调用函数validate()。 通过使用checked属性,我们检查该复选框是否已选中。 cbox[0]的索引为0,用于通过name="del[]"访问第一个值(即1)

您可以执行以下操作:

function validate() {
  var cbox = document.forms["myForm"]["del[]"];
  if (
    cbox[0].checked == false &&
    cbox[1].checked == false &&
    cbox[2].checked == false
  ) {
    alert("Please Check Something");
    return false;
  } else if (confirm("Confirm Submit?")) {
    alert("Successfully Submited");
    return true;
  }
}
<form onload="return validate()" name="myForm">
  <input type="checkbox" name="del[]" value="1"> 1
  <input type="checkbox" name="del[]" value="2"> 2
  <input type="checkbox" name="del[]" value="3"> 3
  <input type="checkbox" name="del[]" value="4"> 4
  <input type="checkbox" name="del[]" value="5"> 5 <br>
  <input type="submit" value="Delete" onclick="validate()">
</form>

演示: CodePen