2012-07-20 43 views
5

Tôi hiện đang xây dựng một ứng dụng web nhỏ với chức năng tương tự trên tất cả các mô-đun. Tôi muốn mã các hàm chung nhỏ để tất cả các lập trình viên bên cạnh tôi, gọi những hàm này và các hàm này trả về dữ liệu cần thiết nhưng quan trọng để chúng thực hiện chức năng của chúng. Trong ví dụ này, tôi đang cố gắng giải quyết bài tập "chọn đúng hay sai" điển hình. Vì vậy, từ template.php họ gọi chức năng này:Javascript: TypeError biến là không xác định

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

Chức năng checkExerciseRB là chức năng chung của tôi, nó được gọi từ người trả lời.

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

Nó hoạt động rất tốt nhưng khi nhìn vào các trình duyệt yêu thích của tôi (FireFox, Chrome) lỗi đăng nhập nó nói:

TypeError: rbuttons[control + j] is undefined 

Bất kỳ manh mối về cách đối phó với vấn đề này?

Trả lời

0

Chỉ mục được chỉ định bởi control + j có tồn tại trong mảng không? tức là: Nếu đánh giá là 4, có ít nhất 5 mục trong mảng không?

Ngoài ra, bạn nên sử dụng var i, var j, v.v ... trong vòng lặp for. Nếu không có biến của bạn bị rò rỉ vào phạm vi mã này được thực thi (rất có thể phạm vi toàn cầu, và điều đó không tốt) :)

6

Điều này có nghĩa là control + j lớn hơn hoặc bằng độ dài của mảng rbuttons. Không có phần tử mảng nào như rbuttons[control + j].

Bạn nên tìm hiểu cách sử dụng trình gỡ lỗi JavaScript trong trình duyệt yêu thích của mình! Debuggers là rất tốt. Chúng cho phép bạn xem mã này chạy, từng dòng, nhanh hoặc chậm như bạn muốn và xem giá trị của các thay đổi khi bạn thực hiện như thế nào.

Bạn sẽ xem nó và bạn sẽ nghĩ “Ồ! Đó là dòng mã là sai! ”

+2

Câu trả lời dạy mọi người cách thức ăn và tự nuôi cá luôn tốt hơn là cho cá một ngày! –

1

Bạn đang lặp qua rbuttons.length lần, nhưng trong mỗi vòng lặp bạn thêm 2 đến control. Sử dụng control để lập chỉ mục mảng của bạn, bạn sẽ chạy qua phần cuối.

Các vấn đề liên quan