2012-07-20 6 views
5

Attualmente sto creando una piccola applicazione Web con funzionalità simili su tutti i moduli. Voglio codificare piccole funzioni generiche in modo che tutti i programmatori accanto a me chiamino queste funzioni e queste funzioni restituiscano dati necessari ma importanti per implementare le loro funzionalità. In questo esempio, sto cercando di gestire il tipico esercizio "scegli il vero o il falso". Così dal template.php chiamano questa funzione:Javascript: TypeError variable is undefined

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 funzione è la mia funzione generica, si parla da 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; 
} 

E le grandi opere, ma mentre guardando miei browser preferito (Firefox, Chrome) log di errore che dice:

TypeError: rbuttons[control + j] is undefined 

Qualsiasi indizio su come affrontare questo problema?

risposta

0

L'indice specificato da control + j esiste nell'array? Ad esempio: Se questo valore è 4, ci sono almeno 5 elementi nell'array?

Inoltre, si dovrebbe utilizzare var i, var j, ecc all'interno del vostro ciclo for. Senza di esso le variabili stanno perdendo nello scope in cui questo codice viene eseguito (molto probabilmente l'ambito globale, e non va bene) :)

6

Questo probabilmente significa che control + j è maggiore o uguale alla lunghezza dell'array rbuttons. Non esiste un elemento di questo tipo come rbuttons[control + j].

Si dovrebbe imparare a utilizzare il debugger JavaScript nel vostro browser preferito! I debugger sono fantastici. Ti permettono di guardare questo codice correre, linea per linea, veloce o lento come vuoi, e vedere come cambia il valore di control mentre vai.

Ti guarda, e ti pensi “Oh! Quella riga di codice è sbagliato!”

+2

Le risposte che insegnano alle persone come pescare e nutrirsi sono sempre meglio che dare un pesce per un giorno! –

1

Stai scorrendo rbuttons.length volte, ma in ogni ciclo si sta aggiungendo 2-control. Usando control per indicizzare il tuo array, hai intenzione di correre oltre la fine.