使用 javascript 捕获数组并使用数组的值

Catching an array with javascript and working with the values of the array

我有以下表格:

echo '<form method="post" id="myForm" onsubmit="return formComp()">';
foreach($array as $value){
   echo '<input type="checkbox" name="check[]" value="$value">';
}
echo '<input type="submit" name="ok" value="OK">';
echo '</form>';

和 javascript:

function formComp(){
    var theForm=document.getElementById("myForm");
    var a = theForm.elements['check[]'];
    for( var i=1; i<a.length; i++){
        if(!a[i].checked){
            alert('Select an option');
            return false;
        }
        else{
            return true;
            break;
        }
    }
}

我正在捕获一个 php 数组,并在循环中使用它,这样我就可以检查每个选项是否满足要求(如果已检查)。问题是它甚至不会停止如果我检查 option.When,至少检查了一个选项,我需要循环停止并且 return 为真,所以它可以提交。

编辑: 顺便说一句,当我检查每个 option.But 时,函数 return 为真我做不到 return至少选中一个时为真。

您的代码主要是这样做的,但它会跳过第一个输入,如果发现未检查的内容,它会 returns false;相反,它应该继续检查:

function formComp(){
    var theForm=document.getElementById("myForm");
    var a = theForm.elements['check[]'];
    for( var i=0; i<a.length; i++){      // Start at 0, not 1
                                         // Don't do anything here if unchecked
        if(a[i].checked){                // We found a checked one, so
            return true;                 // we can return true now
                                         // No `break` here
        }
    }
    alert('Select an option');           // NOW tell them to choose something...
    return false;                        // ...and return false, since none are checked
}

示例:

function formComp(){
  var theForm=document.getElementById("myForm");
  var a = theForm.elements['check[]'];
  for( var i=0; i<a.length; i++){
    if(a[i].checked){
      return true;
    }
  }
  alert('Select an option');
  return false;
}
function test() {
  var rv = formComp();
  alert("formComp result: " + rv);
}
<form id="myForm">
<input type="checkbox" name="check[]" value="1">
<input type="checkbox" name="check[]" value="2">
<input type="checkbox" name="check[]" value="3">
<input type="checkbox" name="check[]" value="4">
<input type="button" value="Test" onclick="test()">
</form>

问题是您仅在检查所有元素时才中断循环。这会导致 alert() 垃圾邮件。

function formComp(){
    var theForm=document.getElementById("myForm");
    var a = theForm.elements['check[]'];
    var isnotchecked = 0;
    for( var i=0; i<a.length; i++){
        if(!a[i].checked){
           isnotchecked = 1;
           break;
        }
    }
    if(isnotchecked){
        alert('at least one of em is not checked!');
        return false;
    }else{
        return true;
    }
}

或者,如果必须检查提交:

function formComp(){
    var theForm=document.getElementById("myForm");
    var a = theForm.elements['check[]'];
    var ischecked = 0;
    for( var i=0; i<a.length; i++){
        if(a[i].checked){
           ischecked = 1;
           break;
        }
    }
    if(ischecked){
        return true;
    }else{
        alert('select at least one option!');
        return false;
    }
}