2012-07-20 41 views
5

Actualmente estoy compilando una pequeña aplicación web con funcionalidades similares en todos los módulos. Quiero codificar pequeñas funciones genéricas para que todos los programadores que están a mi lado llamen a estas funciones y estas devuelven datos necesarios pero importantes para que implementen su funcionalidad. En este ejemplo, estoy tratando de lidiar con el ejercicio típico de "elegir verdadero o falso". Así que desde el template.php que llaman a esta función:Javascript: la variable TypeError no está definida

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 función está mi función genérica, se le llama desde 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; 
} 

Funciona muy bien, pero mientras se mira en mis favoritos de los navegadores (Firefox, Chrome) registro de error que dice:

TypeError: rbuttons[control + j] is undefined 

Cualquier pista sobre cómo tratar este asunto?

Respuesta

0

¿Existe el índice especificado por control + j en la matriz? Es decir: si eso se evalúa a 4, ¿hay al menos 5 elementos en la matriz?

También, usted debe utilizar i var, var j, etc dentro de su bucle. Sin él, sus variables se filtran en el ámbito en el que se ejecuta este código (muy probablemente el alcance global, y eso no es bueno) :)

6

Esto probablemente significa que control + j es mayor o igual que la longitud de la matriz rbuttons. No hay ningún elemento de matriz como rbuttons[control + j].

¡Debe aprender a usar el depurador de JavaScript en sus navegadores favoritos! Los depuradores son geniales. Le permiten ver este código ejecutarse, línea por línea, tan rápido o tan lento como lo desee, y observar cómo cambia el valor de control según avanza.

Lo verás y pensarás "¡Oh! Eso línea de código es incorrecto!”

+2

¡Las respuestas que enseñan a la gente a pescar y alimentarse son siempre mejores que dar un pez por un día! –

1

Cuando recorremos rbuttons.length veces, pero en cada bucle que está añadiendo 2 a control. Usando control para indexar su matriz, se ejecutará más allá del final.

Cuestiones relacionadas