Я извлекаю некоторые данные из внешнего API и затем отображаю их на странице панели. Чтобы сделать это, я генерируя DOM элементы, как только я обработал данные, например, так:Присоединение обработчиков событий к элементам DOM, сгенерированным JQuery
for(var key in companies) {
$(document.createElement("span"))
.attr({ id: key })
.appendTo($("#someDiv"))
.click(function() {
alert(key);
});
$("#"+key).html("<b>" + key + "</b>: $"+companies[key]+"<br>");
}
Однако, когда я нажимаю на каком-либо из вновь образованных span
элементов, я получаю предупреждение последнего значения в companies
. Например, если бы я заявил:
var companies = {
"Google": 3,
"Apple": 4
};
затем нажав на оба Google span
и Apple, span
предупредит 4
. Мое желание - нажать на Google span
, чтобы предупредить 3
.
Почему возврат функции, вызывающей 'alert (key)', дает другое поведение, чем просто вызов 'alert (key)'? –
Это замыкание, сохраняющее значение ключа внутри функции, поскольку клавиша будет изменяться для каждой итерации цикла. – adeneo