Javascript: TypeError variable n'est pas définie
Je suis actuellement à la construction d'une petite application web avec des fonctionnalités similaires à travers tous les modules. Je veux le code de petites fonctions génériques, de sorte que tous les programmeurs à côté de moi, à l'appel de ces fonctions et de ces fonctions renvoient nécessaire, mais les données importantes pour l'application de leur fonctionnalité. Dans cet exemple, je suis en train d'essayer de traiter avec le typique "choisissez vrai ou faux" de l'exercice. Donc, à partir de la template.php ils appellent cette fonction:
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]);
}
}
Fonction checkExerciseRB est ma fonction générique, il est appelé à partir de 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;
}
Il fonctionne très bien mais en regardant mes favoris des navigateurs (FireFox, Chrome) journal d'erreur, il dit:
TypeError: rbuttons[control + j] is undefined
Aucun indice sur la façon de traiter cette question?
OriginalL'auteur mrdeived | 2012-07-20
Vous devez vous connecter pour publier un commentaire.
Cela signifie probablement que
control + j
est supérieure ou égale à la longueur du tableaurbuttons
. Il n'y a pas d'élément de tableau commerbuttons[control + j]
.Vous devez apprendre à utiliser le débogueur JavaScript dans vos navigateurs préférés! Débogueurs sont grands. Ils vous permettent de regarder exécuter ce code, ligne par ligne, aussi vite ou aussi lentement que vous le souhaitez, et montre comment la valeur de
control
changements que vous allez.Vous vais regarder ça, et vous allez penser “Oh! Que ligne de code est faux!”
OriginalL'auteur Jason Orendorff
Vous êtes une boucle dans
rbuttons.length
fois, mais à chaque tour de boucle tu es l'ajout de 2 àcontrol
. À l'aide decontrol
à l'index de votre tableau, vous allez exécuter après la fin.OriginalL'auteur MStodd
Ne l'index spécifié par ctrl + j existe pas dans la table? j'.e: Si qui évalue à 4, est-il au moins 5 éléments dans le tableau?
Aussi, vous devriez être en utilisant var i, var j, etc à l'intérieur de votre boucle. Sans elle, vos variables sont des fuites dans le champ d'application de ce code est exécuté dans (le plus probable de la portée mondiale, et ce n'est pas bon) 🙂
OriginalL'auteur Jason L.