Сегодня я столкнулся со странным поведением в javascript, когда добавлял функцию к событию onclick.
Позвольте мне объяснить:
При динамическом создании некоторых кнопок и добавлении функции к их событиям onclick,как это:
function createButton(a) {
button = document.createElement("button");
button.setAttribute("id","a"+a);
button.innerHTML = "a"+a;
button.onclick = function () {
alert("Should be the same: a"+a+" and "+this.id);
};
return button;
}
for (var a=0;<3=;a++) {
document.body.appendChild(createButton(a));
}
Я получаю это сообщение при нажатии первой кнопки: "Должно быть одинаковым: a0 и a0" , как и ожидалось.
Но когдаЯ хочу сделать то же самое, не используя отдельную функцию (createButton), как это:
var button;
for (var a=0;a<=3;a++) {
button = document.createElement("button");
button.setAttribute("id","a"+a);
button.innerHTML = "a"+a;
button.onclick = function () {
alert("Should be the same: a"+a+" and "+this.id);
};
document.body.appendChild(button);
}
a=999;
Теперь я получил это сообщение при нажатии первой кнопки: "Должно быть одинаково: a999 и a0«.
Кто-нибудь знает, почему они не выдают одинаковые оповещения?И есть ли способ заставить второй пример работать как первый?(я знаю, что button.onclick = "alert('Should be the same: a"+a+" and "+this.id+"'))
делает свое дело, но это просто уродливо)
Любая помощь будет оценена, сценарий можно посмотреть по адресу http://xc -results.com / static / stackoverflowq1.htm