オブジェクトの配列をループしていますが、奇妙な動作が発生しています。これが私のコードです:
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 イベントが配列の最後の項目のみを覚えている理由を誰かが説明できますか? ありがとう