【问题标题】:Catching an array with javascript and working with the values of the array使用 javascript 捕获数组并使用数组的值
【发布时间】:2015-01-28 07:55:11
【问题描述】:

我有以下表格:

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 数组,并在循环中使用它,以便我可以检查每个选项是否符合要求(如果已检查)。问题是即使我检查一个选项它也不会停止。当至少一个选项被选中时,我需要循环停止并返回 true,以便提交。

编辑:顺便说一句,当我检查每个选项时,该函数返回 true。但是当至少一个选项被选中时,我不能让它返回 true。

【问题讨论】:

  • 您需要检查所有选项还是什么? PS。这不是 PHP 数组。
  • @FlashThunder ,问题是我不想检查所有选项让我提交,如果只提交一个就足够了。但是如果不检查所有选项,该功能不会让我.而且我很确定它是一个 php 数组,请检查上面表格中的 check[]
  • check[] 只是 HTML 元素的名称。它是数组,因为它有[],正如HTML 规范中所定义的那样ツツツ 但是,无论如何,请检查我的答案,它应该符合您的需求。

标签: javascript php arrays object


【解决方案1】:

您的代码主要是这样做的,但它会跳过第一个输入,如果发现未检查的内容,它会返回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>

【讨论】:

  • 它有效,但前提是第一个选项被选中。如果我尝试只检查第二个或第三个选项,它返回 false。
  • @PetruLebada:无论选中哪个选项,上述操作都有效,我添加了一个实时示例。
  • @PetruLebada:问题中的修改代码不是我上面给你的,这就是它不起作用的原因。但同样,正如我在对该问题的评论中所说,您不应修改问题中的代码以响应答案。
【解决方案2】:

问题是只有在检查了所有元素时才打破循环。这将导致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;
    }
}

【讨论】:

  • 不起作用,正如 Crowder 所说,这样的事情太复杂了......
  • 是的,对于 OP 来说,理解它应该如何工作会更加复杂。第一个元素是真的,已更正,谢谢。
  • 关于您的编辑 - 这是因为 return 语句结束了函数。总是。无论您将其放置在何处或返回什么价值。这就是我使用break 而不是return 的原因 - 这打破了循环,并继续其余部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 2021-08-15
  • 1970-01-01
  • 2015-04-30
相关资源
最近更新 更多