变量内容未保存在函数中

时间:2012-11-26 13:44:25

标签: javascript

我遇到了一个无法找到解决方案的问题。 在我的代码中有一个名为list的变量。 变量list应该使用getElementsByName()检索输入元素, 但是这个变量在list.length == 0语句之后是空的(即if) 结束了。 在下面的代码中,在for循环的开头,list.length为零或未定义。

为什么会这样?

功能是:

function chekRadioToAnswer() {
    var signAnswers = new Array(0, 0, 0, 0);
    var grades = [[0, 5, 10, 15], [15, 12, 10, 5, 0], [0, 5, 10, 15, 20], [0, 0, 20, 30]];
    var answers = new Array(0, 0, 0, 0, 0, 0);

    for (num = 2; num <= 5; num++) {
        if (num == 2) {
            list = document.getElementsByName("answer2"); 
        }
        if (num == 3) {
            list = document.getElementsByName("answer3"); 
        }
        if (num == 4) {
            list = document.getElementsByName("answer4"); 
        }
        if (num == 5) {
            list = document.getElementsByName("answer5"); 
        }

        for (i = 0; i < list.length; i++) {
            if (list[i].checked) {
                var value = document.getElementById("hiddenAnswers").getAttribute("value");
                 document.getElementById("hiddenAnswers").setAttribute("value", (value + grades[num - 2][i]));
                 break;
             }
        }

        list.length = 0;
    }
    return false;
} 

2 个答案:

答案 0 :(得分:0)

如果您正在尝试创建输入数组,则需要首先声明列表并为其分配一个空数组:

var list = [];

然后使用push添加到数组中:

//If you are going to use getElementsByName, take the first member of the array

var rdo = document.getElementsByName("answer3");

for (var x = 0; x < rdo.length; x++){
  if (rdo[x].checked){
    list.push(rdo[x]);
  }
}

答案 1 :(得分:-1)

如果找不到给定名称的元素,

whatever = document.getElementsByName(name)会为whatever分配一个空数组。确保元素名称正确无误。

最好使用var关键字声明变量。这可以防止许多怪异的错误。