2014-01-18 2 views
0

아래 코드는 시도했지만 IE에서는 작동하지 않는 모든 브라우저에서 작동합니다.at은 모두 null로 끝납니다. (브라우저에서 Mac Safari, Chrome, FireFox, PC FireFox, Opera, Chrome을 테스트했습니다.) IE는 실패 할 수있는 유일한 사람입니다. 어떤 사람이 내 문제를 볼 수 있습니까?JavaScript 개체가 IE에서 작동하지 않습니다

IE 버전은 10

function Save() { 
    var path = document.location.pathname; 

    var Checked = "{"; 
    jsonObj = []; 

    $('.questionsOnPage').each(function() { 

     item = {} 
     var id = this.id; 

     jQuery(this).children(".questionCheckBox").each(function() { 
      item ["id"] = this.id; 
      item ["selected"] = this.checked; 
     }); 

     jQuery(this).children(".question").each(function() { 
      item ["question"] = this.innerHTML; 
     }); 

     answers = {} 

     jQuery(this).children(".answer").each(function() { 
      answer = {}; 
      answer ["selector"] = $(this).attr("data-selector"); 
      answer ["answerText"] = $(this).attr("data-answerText"); 
      answer ["correct"] = $(this).attr("data-correct"); 
      answers [$(this).attr("data-selector")] = answer; 
     }); 

     item["answers"] = answers; 

     jsonObj.push(item); 
    }); 
+1

IE의 버전은 무엇입니까? 그것은 많은 차이를 만듭니다. 또한 DOM을 많이 처리하고 있으므로 DOM을 포함 시키십시오. (예 : FF/Chrome에서 요소 검사 -> 외부 HTML 복사 -> 여기에 붙여 넣기/붙여 넣기) – wizzard0

+2

item = {} 앞에 ** var **을 추가하면 – TwilightSun

+1

참고로 ** 아무 것도 ** 할 수 없습니다. JSON으로 JSON이 아닌 객체 배열을 만들고 있습니다. 전역 적으로'item'에 문제가있을 수 있습니다. 로컬로 만드십시오. –

답변

3

데릭 내가 대답에 넣고 있습니다 제안한 것처럼.

문제에 대한 해결책은 : 항목 = {}

다른 브라우저 벤더는 자바 스크립트 엔진에 다른 구현을하기 전에 에게 바르를 추가합니다. 내 관찰에 IE의 배열에 무언가를 밀어 넣을 때 복제 된 복사본 대신 객체 참조를 푸시합니다 (이것이 사실인지 확실하지 않음). 푸시 후 항목을 수정하면 이전에 푸시 된 객체가 변경됩니다. var를 추가하면 각 반복 단계에서 새 사본을 얻을 수 있습니다.

관련 문제