我正在遍历一系列对象,并且遇到了奇怪的行为。这是我的代码:
window.onload = function () {
document.getElementById('btnAdd').onclick = function () {
add("button");
};
function add(type) {
var names = {};
names['one'] = { id: "Button 1",msg:"#1" };
names['two'] = { id: "Button 2", msg: "#2" };
names['three'] = { id: "Button 3", msg: "#3" };
//Create an input type dynamically.
function addOnClick(element, currentName) {
element.onClick = function () {
alert("button is " + names[currentName].msg);
};
};
for (name in names) {
var element = document.createElement("input");
element.type = type;
element.value = names[name].id;
element.name = name;
addOnClick(element,name);
var foo = document.getElementById("fooBar");
//Append the element in page (in span).
foo.appendChild(element);
}
}
};
继承人的html:
<p>
<input type="button" id="btnAdd" value="Add Buttons" />
<p id="fooBar">Buttons: </p>
</p>
如果您在浏览器中运行它,并使用“添加按钮”按钮,则会创建 3 个按钮并正确命名。但是,如果您单击 3 个新按钮之一,警告框总是显示“按钮为 #3”,我不知道为什么。有人可以解释为什么 onClick 事件只记住我数组中的最后一项吗?谢谢