for循环后没有执行的代码

code not executing after for loop -- javascript

本文关键字:执行 代码 循环 for      更新时间:2023-09-26

我正在编写一个函数,该函数应该循环遍历所有复选框并加载复选框的"值",这些复选框被检查到一个数组中,但是除了第一个for循环之外没有执行任何操作。我完全被难住了,我错过了什么?

function saveSettings(){
    var count = 1; //count for db
    var checked=[]; //array of checked values
    var inc = 0; //only incremented when checkbox is checked
    var dataString = "x";
    for(var i=0; i<=2; i++) { //loads checked array with checked values
        if(document.getElementById("check"+i).checked == true){
            checked[inc] = document.getElementById("check"+i).value;
            alert(checked[inc]) // <------ executing as expected
            inc++;
        }
    }
    alert("made it") // <------ not executing
    if(checked.length>0){ // loads checked values into dataString
        for(var i=0; i == checked.length; i++){
            if(i == 0){
                dataString = "co_" + count +"="+checked[i]
            }
            else {
                dataString = dataString +"&co_" + count +"="+checked[i]
            }
            count++;
        }
    }
    alert(dataString)

根据您对问题的描述,我认为问题在于复选框的数量,如果您只有2个复选框,那么条件i<=2将导致问题,因为docuement.getElementById('check2')将未定义,导致控制台出现Uncaught TypeError: Cannot read property 'checked' of null之类的错误。

由于您正在尝试处理动态数量的元素,请尝试使用类来选择感兴趣的复选框,如

function saveSettings() {
  var checked = [];
  var dataString = "x";
  var checks = document.getElementsByClassName('check');
  //if you can't add a class then fetch all the checkboxes in the page
  //var checks = document.querySelectorAll('input[type="checkbox"]');
  for (var i = 0; i < checks.length; i++) {
    if (checks[i].checked == true) {
      checked.push(checks[i].value);
    }
  }
  console.log("made it: ", checked)
  if (checked.length > 0) {
    dataString = '';
    for (var i = 0; i < checked.length; i++) {
      dataString += (i == 0 ? '' : '&') + "co_" + i + "=" + checked[i]
    }
  }
  alert(dataString)
}
<input type="checkbox" class="check" id="check0" value="1" />
<input type="checkbox" class="check" id="check1" value="2" />
<input type="checkbox" class="check" id="check2" value="3" />
<br />
<button onclick="saveSettings()">Test</button>

这一行

if(document.getElementById("check"+i).checked == true){ //...

getElementById将返回一个undefined值,undefined没有。checked属性。

文档中有多少个复选框?

第二个for循环出错

function saveSettings(){
    var count = 1; //count for db
    var checked=[]; //array of checked values
    var inc = 0; //only incremented when checkbox is checked
    var dataString = "x";
    for(var i=0; i<=2; i++) { //loads checked array with checked values
        if(document.getElementById("check"+i).checked == true){
            checked[inc] = document.getElementById("check"+i).value;
            alert(checked[inc]) // <------ executing as expected
            inc++;
        }
    }
    alert("made it") // <------ not executing
    if(checked.length>0){ // loads checked values into dataString
        for(var i=0; i < checked.length; i++){
            if(i === 0){
                dataString = "co_" + count +"="+checked[i]
            }
            else {
                dataString = dataString +"&co_" + count +"="+checked[i]
            }
            count++;
        }
    }
    alert(dataString)
    }
<input type="checkbox" id="check0"/>
<input type="checkbox" id="check1"/>
<input type="checkbox" id="check2"/>
<button onclick="saveSettings()">Run</button>

尝试以下可行的解决方案。代码中的第二个for循环条件(i == checked.length)是错误的。应该是i < checked.length)

function saveSettings() {
        var count = 1; //count for db
        var checked = []; //array of checked values
        var inc = 0; //only incremented when checkbox is checked
        var dataString = "x";
        for (var i = 0; i <= 2; i++) { //loads checked array with checked values
            if (document.getElementById("check" + i).checked == true) {
                checked[inc] = document.getElementById("check" + i).value;
                inc++;
            }
        }
        if (checked.length > 0) { // loads checked values into dataString
            for (var i = 0; i < checked.length; i++) {
                if (i == 0) {
                    dataString = "co_" + count + "=" + checked[i]
                }
                else {
                    dataString = dataString + "&co_" + count + "=" + checked[i]
                }
                count++;
            }
        }
        alert(dataString)
    }