2012-08-10 4 views
1

jquery를 사용하는 JSP 파일이 포함 된 클래스 용 웹 응용 프로그램을 만들고 있습니다. 제출하기 바로 전에 앱에서 경고를 발생 시키길 원합니다. 이것은 내 실제 프로그램에서 시간의 일부를 작동하고, 다른 경우에는 경보가 발동되지 않습니다. 항상 작동하거나 전혀 작동하지 않는 인스턴스를 고정시킬 수 없습니다. 파이어 버그 중단 점을 추가하지 않으면 내 오류 콘솔이 문제에 대해 침묵합니다. 그럼 나에게 준다때때로 JQuery 제출 기능이 작동합니다.

Error: attempt to run compile-and-go script on a cleared scope 
Source File: http://code.jquery.com/jquery-1.7.2.min.js 
Line: 2 

그러나 나는 그것이 무엇을 의미하는지 모른다. 필자가 방화범이가는 한, 경고 메시지가 나오기 전에 왜 왜곡이 멈추는 지 이해할 수 없다.

나는 문제를 문서화하려고했지만 실제로 제출하지 않았기 때문에 내 실제 프로그램과 너무 다르다고 생각한다. 내 실제 프로그램에서 일부 코드를 보여 드리겠습니다. (SSCCE의 부족에 대해 죄송합니다.)

$(document).ready(function() { 
    $("#questionDisplay").submit(function() { 
     var correctAnswer = $(".correctAnswer").attr("value"); 
     var answer = ""; 

     if ($(".multipleChoice").length > 0) { 
      answers = $("input:checked"); 
      for (var obj in answers) { 
       answer += obj.attr("value") + "#"; 
      } 
     } else if ($(".fillBlank").length > 0) { 
      for (var answerNo = 1; $(".answer" + answerNo).length > 0; ++answerNo) { 
       answer += $(".answer" + answerNo).attr("value") + "#"; 
      } 
     } else { 
      answer = $(".answer1").attr("value"); 
     } 

     if (answer == correctAnswer) { 
      alert("Yes! Correct!"); 
     } else { 
      alert("Sorry, incorrect."); 
     } 
    }); 
}); 

는 JSP는 거대한 혼란 (우리가 scriplets을 :(사용해야합니다),하지만 당신은 그것을보고 싶으면 그냥 줄께요 알고있다.

어떻게

+0

이 많은 가능성이고, 당신이 jsfiddle.net에서 예제를 만들 수 있는지. 확인할 수있는 몇 가지 사항은 다음과 같습니다. => 포함 순서가 올바른지 확인하십시오. => #questionDisplay가 양식 태그 여야하고, 많은 클래스를 사용하여 속성 값을 얻고 있으며 고유 한 처리 방법이 겉으로는 잘못된 방법입니다. 출처, 회사 정보를 삭제하고 jsfiddle.net에서 문제를 재현하십시오. 또는 문제의 통찰력을 줄 수있는 더 많은 코드를 게시하십시오. – Kiran

답변

3

예에서 answers은 jQuery 요소 모음입니다. for(var obj in answers) { }을 사용하여 루프를 반복하는 것은 실제로 요소 자체가 아니라 응답 속성을 반복합니다. 따라서 호출합니다. 속성의 attr()이 작동하지 않습니다.

일반적으로 jQuery에 오류가있는 디버거 상태가 표시되는 경우 jquery가 아닌 선택된 객체에서 jQuery 메서드를 호출하는 시간은 99.9 %입니다. 이 경우 Chrome의 자바 스크립트 콘솔에서 오류가 발생했으며 결과가 콘솔마다 다를 수 있습니다.

jQuery 요소를 저장하는 변수에 $를 붙이면 변수가 jQuery 객체임을 나타낼 수 있습니다. 예를 들어 $answers을 사용하면 포함 된 내용을 더 쉽게 추적 할 수 있습니다.

사용 대신이의

answers.each(function() { 
    answer += $(this).attr("value") + "#"; 
}); 

:

for (var obj in answers) { 
    answer += obj.attr("value") + "#"; 
} 
+2

또는 'this.value' 또는'$ (this) .val() ' – elclanrs

+1

전체 문제라고 나는 믿을 수 없습니다. 자바 스크립트는 우습다. – Eva

+0

내가 바보 같은 일이 앞으로 벌어지는 것을 막을 수있는 방법이 있을까요? – Eva

관련 문제