createElement("a")&onclick
Есть код по динамическому созданию 10 элементов <a>... Вопрос с событием onclick: все созданные ссылки по клику дают alert 9 ???? Почему собственно? Как ремонтировать?
for(var i=0; i<10; i++) { var new_a = document.createElement("a"); new_a.onclick='alert(i)'; new_a.href='javascript:'; var textNode = document.createTextNode(i); new_a.appendChild(textNode); } спасибо... |
var new_a... var textNode... вы каждый раз перезаписываете значение переменной. по прошествии цикла остаётся только последнее значение. |
new_a.onclick=function(i) { return function() { alert(i); } }(i) |
а, ну да!!! пару строк не дописал...
var list = document.getElementById('div'); // Блок for(var i=0; i<10; i++) { var new_a = document.createElement("a"); new_a.onclick='alert(i)'; new_a.href='javascript:'; var textNode = document.createTextNode(i); new_a.appendChild(textNode); list.appendChild(new_a); } ничего не перетираю, появляются 10 ссылок но все они дают alert 9 ?! |
<div id="div"></div> <script type="text/javascript"> var list = document.getElementById('div'); // Блок for( var i = 0; i < 10; i++ ) { var new_a = document.createElement("a"); new_a.onclick = function(i) { return function() { alert(i); } }(i); new_a.href = 'javascript:'; var textNode = document.createTextNode(i); new_a.appendChild(textNode); list.appendChild(new_a); } </script> |
Цитата:
либо делайте функцией, как написал devote, либо: new_a.onclick="alert("+i+")"; хотя сомневаюсь, что так будет работать. |
ух ты!!!!! работает!!!! devote Рулит!!! спасибо + всем спасибо...
function(i) {return function() { alert(i); } }(i); что за скобки такие? (i) {...}(i); не встречал ещё... |
Цитата:
|
тю, блин!!!! первый класс вторая четверть... sorry за вопрос... всем спасибо!!!
|
это классическая ошибка начинающих в javascript, сам над ней недавно сидел часа полтора, пока не догадался справочник открыть :)
|
Часовой пояс GMT +3, время: 09:30. |