0

解決策が見つからないという問題があります。私のコードには、という変数があります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;
} 
4

2 に答える 2

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]);
  }
}
于 2012-11-26T13:48:15.210 に答える
-1

whatever = document.getElementsByName(name)whatever指定された名前の要素が見つからない場合は、空の配列を割り当てます。要素名が正しいことを確認してください。

varまた、キーワードで変数を宣言するのも良いでしょう。これにより、多くの不気味なエラーが防止されます。

于 2012-11-26T13:52:01.043 に答える