2014-01-18 90 views
0

下面的代码适用于我尝试过的所有浏览器,但不适用于IE。 jsonObj以最后所有空值结束。 (浏览器测试Mac safari,chrome,firefox,PC FireFox,Opera,Chrome)IE是唯一一个失败的。有人能看到我的问题吗?在IE中不工作的JavaScript对象

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,请注意包含它? (例如,在FF /铬,检查元素 - >复制外部HTML - 在这里>粘贴/上引擎收录) – wizzard0

+2

也许加入** **变种前项= {}可以帮助你 – TwilightSun

+1

仅供参考,这有什么** **做与JSON。您正在创建一个对象数组,而不是JSON。有*可能*是'item'是全球性的问题。使其成为本地。 –

回答

3

正如德里克建议我把这个答案。

的解决问题的方法:添加瓦尔前项= {}

不同的浏览器厂商对JavaScript引擎不同的实现。根据我的观察,当你在IE中将某些东西推入一个数组时,你会推送对象的引用而不是克隆副本(不确定这是否为真)。因此,在推送后修改项目会导致更改先前推送的对象。添加var将确保您将在每个迭代步骤中获得新副本。

相关问题