以下代码适用于我尝试过但不适用于IE的所有浏览器。 jsonObj
最终得到所有空值。 (浏览器测试过Mac safari,chrome,firefox,PC FireFox,Opera,chrome)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);
});
答案 0 :(得分:4)
正如Deryck所说,我会把它放在答案中。
问题的解决方案:在item = {}
之前添加 Var不同的浏览器供应商在JavaScript引擎上有不同的实现。根据我的观察,当你在IE中将某些内容推入数组时,你正在推送对象的引用而不是克隆的副本(不确定这是否为真)。因此,在推送之后修改项目将导致更改先前推送的对象。添加var将确保您在每个迭代步骤中获得一个新副本。