2012-07-20 11 views
5

Obecnie tworzę małą aplikację internetową o podobnej funkcjonalności dla wszystkich modułów. Chcę zakodować małe ogólne funkcje, tak aby wszyscy programiści znajdujący się obok mnie wywoływały te funkcje, a te funkcje zwracały niezbędne, ale ważne dane, aby mogły zaimplementować swoją funkcjonalność. W tym przykładzie próbuję uporać się z typowym ćwiczeniem "wybierz prawdę lub fałsz". Więc z template.php nazywają tę funkcję:JavaScript: zmienna TypeError jest niezdefiniowana

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

Funkcja checkExerciseRB jest moją funkcję rodzajowy, jest wywoływana z 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; 
} 

Działa świetnie, ale patrząc na moich ulubionych przeglądarek (Firefox, Chrome) log błąd mówi:

TypeError: rbuttons[control + j] is undefined 

Każda wskazówka, w jaki sposób radzić sobie z tego sprawy?

Odpowiedz

0

Czy indeks określony przez control + j istnieje w tablicy? tj.: jeśli wartość ta wynosi 4, czy w tablicy jest co najmniej 5 elementów?

Powinieneś także używać var ​​i, var j, etc wewnątrz pętli for. Bez niego twoje zmienne przeciekają do zakresu, w którym kod jest wykonywany (najprawdopodobniej zasięg globalny, a to nie jest dobre) :)

6

To prawdopodobnie oznacza, że ​​control + j jest większa lub równa długości tablicy rbuttons. Nie ma takiego elementu tablicy, jak rbuttons[control + j].

Powinieneś nauczyć się korzystać z debuggera JavaScript w swoich ulubionych przeglądarkach! Debugery są świetne. Pozwalają oglądać ten kod uruchamiany, linia po linii, tak szybko lub tak długo, jak chcesz, i obserwuj, jak zmienia się wartość control.

Będziesz go oglądać, a pomyślisz: "Och! To linia kodu jest źle!”

+2

Odpowiedzi uczące ludzi, jak łowić i karmić się są zawsze lepsze niż dawanie ryb na jeden dzień! –

1

Ty przelotowego rbuttons.length razy, ale w każdej pętli dodajesz 2 do control. Za pomocą control indeksować twoją tablicę, będziesz biegać poza końcem.

Powiązane problemy