2012-07-20 17 views
5

Ich baue derzeit eine kleine Web-Anwendung mit ähnlicher Funktionalität über alle Module. Ich möchte kleine generische Funktionen kodieren, damit alle Programmierer neben mir, diese Funktionen aufrufen und diese Funktionen notwendige aber wichtige Daten zurückliefern, um ihre Funktionalität zu implementieren. In diesem Beispiel versuche ich mit der typischen "Wählen Sie richtig oder falsch" Übung umzugehen. Also von der template.php sie rufen Sie diese Funktion:Javascript: TypeError Variable ist 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]); 
    } 
} 

Funktion checkExerciseRB ist mein generische Funktion, es von checkAnswers genannt wird.

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; 
} 

Es funktioniert großartig, aber während meines Liebling Browser (FireFox, Chrome) sucht Fehlerprotokoll heißt es:

TypeError: rbuttons[control + j] is undefined 

Jede Ahnung, wie man mit dieser Angelegenheit befassen?

Antwort

0

Gibt es den Index, der von control + j angegeben wird, im Array? h.: ​​Wenn dies 4 ergibt, sind mindestens 5 Elemente im Array vorhanden?

Außerdem sollten Sie var i, var j usw. in Ihrer for-Schleife verwenden. Ohne es gehen Ihre Variablen in den Bereich, in dem dieser Code ausgeführt wird (höchstwahrscheinlich der globale Bereich, und das ist nicht gut) :)

6

Dies bedeutet wahrscheinlich, dass control + j größer als oder gleich der Länge des Arrays rbuttons ist. Es gibt kein solches Array-Element wie rbuttons[control + j].

Sie sollten lernen, wie Sie den JavaScript-Debugger in Ihren bevorzugten Browsern verwenden! Debugger sind großartig. Sie können beobachten, wie dieser Code Zeile für Zeile so schnell oder so langsam ausgeführt wird, wie Sie möchten, und beobachten, wie sich der Wert von control ändert, während Sie fortfahren.

Sie werden es sehen, und Sie werden denken "Oh! Das Codezeile ist falsch!“

+2

Antworten, die Leuten beibringen, wie man fischt und sich selbst ernährt, sind immer besser, als einen Fisch für einen Tag zu geben! –

1

Du Schleifen rbuttons.length Zeiten, aber in jeder Schleife sind Addieren Sie 2-control. Mit control indizieren Sie Ihr Array, Sie werden über das Ende hinaus laufen.

Verwandte Themen