我不确定如何使问题更精确。
我有这张桌子。如您所见,每行中都有一些复选框,checked
值在多维对象中分配,结构如下所示。
正在从JSON文件加载checked
值,当您按下save时,它会创建一个新对象,该对象假设具有相同的相同结构但具有更新的值,然后覆盖JSON文件。
代码:
function saveRecruit() {
var obj = {};
var specsObj = {};
var classesObj = {};
var rowCount = $("#classTable tr").length;
var columnCount;
var jsonChar;
var jsonSpec;
var jsonSpecRC;
var jsonString;
console.log("------ LOGGING FIRST: specsObj ------");
console.log(specsObj);
for(x = 1;x<=rowCount;x++)
{
jsonChar = $("#classTable tr:nth-child(" + x + ") td:nth-child(1)").text();
columnCount = $("#classTable tr:nth-child(" + x + ")").children().length;
for(y = 2;y<=columnCount;y++)
{
jsonSpec = $("#classTable tr:nth-child(" + x + ") td:nth-child(" + y + ")").text();
jsonSpecRC = $("#classTable tr:nth-child(" + x + ") td:nth-child(" + y + ") input:nth-child(2)")[0].checked;
console.log("Setting " + jsonSpec + " to " + jsonSpecRC + " in specsObj");
console.log("X: " + x + " - Y: " + y);
specsObj[jsonSpec] = jsonSpecRC;
};
obj[jsonChar] = specsObj;
console.log(jsonChar + ": specsObj");
console.log(specsObj);
};
console.log("Logging obj");
console.log(obj);
console.log(jsonString);
$("#jsonInput").val(jsonString);
return false;
};
它检查每一行,然后在两个for
循环中将每个列值分配给该行。然而,这里出现的问题是过去几个小时一直困扰着我。出于某种原因,所有checked
值都分配给每个“第1层”对象,如下图所示。我真的不明白,显然,德鲁伊对象应该只包含rc,平衡,野性,守护和恢复的值。
我希望你们能帮助我解决这个问题,并随时告诉我,我是否对某些事情一无所知。提前谢谢!
编辑:忘记包含与标题相关的内容。我不确定,但是在运行for
循环之前,所有值都已分配。
function saveRecruit() {
var obj = {};
var specsObj = {};
var classesObj = {};
var rowCount = $("#classTable tr").length;
var columnCount;
var jsonChar;
var jsonSpec;
var jsonSpecRC;
var jsonString;
console.log("------ LOGGING FIRST: specsObj ------");
console.log(specsObj);
...
在分配任何值之前,正在声明并记录变量specsObj
。您可以在下图中看到日志:
答案 0 :(得分:1)
问题是在你的循环中你不断添加specsObj
而不重置每一行。
以下是您的代码,其中添加了一行来解决问题
for(x = 1;x<=rowCount;x++)
{
jsonChar = $("#classTable tr:nth-child(" + x + ") td:nth-child(1)").text();
columnCount = $("#classTable tr:nth-child(" + x + ")").children().length;
specsObj = {}; // add this to reset the specsObj for each character
for(y = 2;y<=columnCount;y++)
{
jsonSpec = $("#classTable tr:nth-child(" + x + ") td:nth-child(" + y + ")").text();
jsonSpecRC = $("#classTable tr:nth-child(" + x + ") td:nth-child(" + y + ") input:nth-child(2)")[0].checked;
console.log("Setting " + jsonSpec + " to " + jsonSpecRC + " in specsObj");
console.log("X: " + x + " - Y: " + y);
specsObj[jsonSpec] = jsonSpecRC;
};
obj[jsonChar] = specsObj;
console.log(jsonChar + ": specsObj");
console.log(specsObj);
};