0

I have a form

<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>

i try to do checkbox validation with JavaScript,if people not select a check box,it will show a message,if people select one or more than one check box, it will show the confirm alert to confirm submit.But my JavaScript is not work. The form will submit without validation.

    <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>

How can i fix the problem?

0

3 Answers 3

2

getElementsByName returns a collection of objects. That collection does not have a checked property, so this fails:

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

A simple alternative would be to use document.querySelector to look for a single checked input:

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

Also, change this:

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

… to this:

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

Fiddle

Sign up to request clarification or add additional context in comments.

Comments

1

Something like this will make sure at least one check box is checked

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>

Comments

0

Another Simple way is to create & invoke the function validate() when the form loads & when submit button is clicked. By using checked property we check whether the checkbox is selected or not. cbox[0] has an index 0 which is used to access the first value (i.e 1) with name="del[]"

You can do the following:

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>

Demo: CodePen

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.