Сообщение от cyber
|
или так=)
for (var i = 0; i < links.length; i++) (function(i) {
links[i].onclick = function() {
alert(i);
}
})(i);
а лучше использовать делегирование
|
Спасибо за способ. Возьму на заметку.
Насколько я понимаю в указанном мною примере в цикле идет перебор всех ссылок, и назначается каждому событие клик которое выполняет функцию алерт со значением i. Без инкапсуляции значение i после исполнения кода остается глобальным и при вызове функции в алерте вызывается глобальная переменная i.
С инкапсуляцией видимо ей передается не сама переменная, а ее значение, уже после исполнения кода. Я правильно понимаю? Или я чего-то не понимаю?
При этом на вновь созданную ссылку данный код уже не действует, и остается вопрос, как его получить?
for (var i = 0; i < document.links.length; i++) {
(function(i) {
document.links[i].onclick = function() {
alert(i);
var newElem = document.createElement("a");
newElem.href = "#";
newElem.innerHTML = "Новая ссылка";
document.body.insertBefore(newElem, document.body.firstChild);
return false;
}
})(i);
}
С делегированием я к сожалению еще не знаком, если только в джиквери, но думаю, что это не совсем то, или скорее совсем не то.