簡體   English   中英

Javascript:TypeError變量未定義

[英]Javascript: TypeError variable is undefined

我目前正在構建一個在所有模塊中具有類似功能的小型Web應用程序。 我想編寫小的通用函數,以便我旁邊的所有程序員調用這些函數,這些函數返回必要但重要的數據,以便他們實現其功能。 在這個例子中,我試圖處理典型的“選擇真或假”練習。 所以從template.php他們調用這個函數:

function checkAnswers(){
var radiobuttons = document.form1.exer1;
var correctAnswers = answers(); //this is an array of string
var checkedAnswers = checkExerciseRB(radiobuttons, 2, correctAnswers);
    for(i=0; i<checkedAnswers.length; i++){
        alert(checkedAnswers[i]);
    }
}

函數checkExerciseRB是我的通用函數,它是從checkAnswers調用的。

function checkExerciseRB(rbuttons, opciones, correct){
    var answers = new Array();
    var control = 0;
    for(i=0; i<rbuttons.length; i++){
        var noPick="true";
        for(j=0; j<opciones; j++){
            if(rbuttons[control+j].checked){
                if(rbuttons[control+j].value==correct[i]){
                    answers[i]= 1;
                    noPick="false";
                    break;
                }
                else{
                    answers[i]=2;
                    noPick="false";
                    break;
                }
            }
        }
        if(noPick=="true")
            answers[i]=0;
        control=control+opciones;
    }
    return answers;
}

它工作得很好,但在查看我最喜歡的瀏覽器(FireFox,Chrome)錯誤日志時,它說:

TypeError: rbuttons[control + j] is undefined

有關如何處理此事的任何線索?

這可能意味着control + j大於或等於數組rbuttons的長度。 沒有像rbuttons[control + j]這樣的數組元素。

您應該學習如何在您喜歡的瀏覽器中使用JavaScript調試器! 調試器很棒。 它們允許您逐行觀察此代碼運行,無論您要快還是慢,並觀察control的值如何隨着您的變化而變化。

你會看到它,你會想到“哦! 行代碼錯了!“

你循環遍歷rbuttons.length次,但是在每個循環中你都要加2來control 使用control為您的數組編制索引,您將跑到最后。

control + j指定的索引是否存在於數組中? ie:如果計算結果為4,那么陣列中至少有5個項目嗎?

此外,您應該在for循環中使用var i,var j等。 沒有它,你的變量會泄漏到執行此代碼的范圍內(很可能是全局范圍,這並不好):)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM