[英]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.