我有以下javascript代码无法正常工作。我有一个复选框列表,其中两个项目是“TestDuration”和“AssessmentScores”。我正在尝试迭代列表(工作正常)并让它将检查的值添加到数组中。
var SAIndex = 0;
var SSIndex = 0;
var ScoresIndex = 0;
var SubAssessments = [];
var SubAssessmentScores = [];
//Get to the container element
var SSList = document.getElementById("islSubAssessmentScore_container");
//turn it into an array of the checkbox inputs
SSList = SSList.getElementsByTagName("input");
//create a temporary object to store my values
var tempPair = new Object();
//iterate through the checkbox lists
for(var i = 1; i < SSList.length;i++)
{
//if the value is checked add it to the array
if (SSList[i].checked)
{
var P = SubAssessments[SAIndex];
var V = SSList[i].value;
//tempPair.Parent = SubAssessments[SAIndex];
tempPair.Parent = P;
//tempPair.Value = SSList[i].value;
tempPair.Value = V;
//show me the values as they exist on the page
alert(tempPair.Parent + "|" + tempPair.Value);
SubAssessmentScores.push(tempPair);
//show me the values I just added to the array
alert(SubAssessmentScores.length-1 + "|" + SubAssessmentScores[SubAssessmentScores.length-1].Parent + "|" + SubAssessmentScores[SubAssessmentScores.length-1].Value);
//uncheck the values so when I refresh that section of the page the list is empty
SSList[i].checked = false;
}
}
//output the list of objects I just created
for (i = 0;i < SubAssessmentScores.length;i++)
alert(i + "|" + SubAssessmentScores[i].Parent + "|" + SubAssessmentScores[i].Value)
现在发生的事情是,当我遍历列表时,我收到以下警告:
- 第一次通过 -
StudentID|TestDuration
0|StudentID|TestDuration
-second pass-
StudentID|AssessmentScores
1|StudentID|AssessmentScores
这是我期望输出的...但是在代码片段结束时,当它运行for循环以吐出所有值时,我得到以下警告......
0|StudentID|AssessmentScores
1|StudentID|AssessmentScores
我不能为我的生活弄清楚为什么它用第二个值替换第一个值。我以为它可能正在使用一个引用变量,这就是为什么我在P和V变量中加入以试图解决这个问题,但结果是相同的。
答案 0 :(得分:2)
这是因为您在循环的每次迭代中添加相同的变量。
尝试按照以下方式更改推送:
SubAssessmentScores.push({
Parent: P,
Value: V
});
那就是说,我建议你在语言中学习更多的javascript和约定,例如你的变量命名是不受欢迎的,因为你只应该在名称的开头使用大写字母来构造函数。
一本好书是道格拉斯克罗克福德的好书。