可能重复:
Javascript臭名昭著的循环问题?
我有一个小问题,如果你们中的一些人能意识到这里缺少什么样的逻辑,那就太好了,因为我似乎找不到它:
我有一个包含先前操作结果的数组。假设数组是:
var results = [0, 1];
然后我有一堆代码,我在其中创建了一些按钮,并在for
循环中为这些按钮分配了不同的功能,具体取决于数组的位置。问题是由于某种原因,所有创建的按钮(在这种情况下是两个)都带有分配给数组最后一个值的函数(在这种情况下,两者都会作为一个出现,而不是第一个带有 0 和第二个有 1)
这是代码:
for (var i = 0; i < results.length; i++) {
var br2 = b.document.createElement("br");
var reslabel = b.document.createTextNode(Nom[results[i]].toString());
var card = document.createElement("input");
card.type = "button";
id = results[i]; // this is the problematic value.
card.onclick = newcard; // this function will use the above value.
card.value = "Show card";
divcontainer.appendChild(br2);
divcontainer.appendChild(reslabel);
divcontainer.appendChild(card);
}
实际上,此代码生成的按钮与数组中的元素一样多,每个按钮都有其正确的标签(它从另一个数组中检索标签)。一切都很好。然后,我点击按钮。所有按钮都应该运行该newcard
功能。该函数需要id
变量,所以在这种情况下它应该是:
- 第一个按钮:使用值为 0 的
newcard
变量运行id
- 第二个按钮:使用值为 1 的
newcard
变量运行id
但是两个按钮都使用id
1 来运行……这是为什么呢?
这可能很简单,或者只是在我的时区已经很晚了:-)无论如何,我会很感激任何评论。我在这里学到了很多...
谢谢!
编辑以添加 newcard 的定义:
function newcard() {
id = id;
var toerase = window.document.getElementById("oldcard");
toerase.innerHTML = "";
generate();
}
该函数generate
将使用id
. 没有错,它生成的内容很好,只是id
总是设置为数组中的最后一项。