Onclick элемента списка <li>
После получения данных ajax обрабатываю xml, создаю список и каждому пункту присваиваю onclick. При этом если делать это через li.onclick (закомментировано) то работает некорректно: при нажатии на любой пункт списка - вызывается значение присваиваемое последнему пункту. Если делать через setAttrubite то работает правильно..
for (var i=0; i<listArray.length; i++) { html = ""; li = document.createElement('li'); id = null; id = listArray.item(i).getAttribute("id"); //li.onclick = function(){GetItem(id)}; li.setAttribute("onclick","GetItem("+id+")"); if (!listArray.item(i).firstChild){ html += "-без названия-"; } else{ html += listArray.item(i).firstChild.data; } li.innerHTML = html; myUl.appendChild(li); } Как исправить? |
for (var i=0; i<listArray.length; i++) { html = ""; li = document.createElement('li'); id = null; id = listArray.item(i).getAttribute("id"); (function( id ) { li.onclick = function(){ GetItem( id ); } })( id ); if (!listArray.item(i).firstChild){ html += "-без названия-"; } else{ html += listArray.item(i).firstChild.data; } li.innerHTML = html; myUl.appendChild(li); } |
Спасибо, работает. Скажите пожалуйста что надо почитать чтобы понять как это работает..
|
|
а можно и без замыканий:
for (var i=0; i<listArray.length; i++) { html = ""; li = document.createElement('li'); id = null; id = listArray.item(i).getAttribute("id"); *!* with ({id: id}) { li.onclick = function(){ GetItem( id ); } } */!* if (!listArray.item(i).firstChild){ html += "-без названия-"; } else{ html += listArray.item(i).firstChild.data; } li.innerHTML = html; myUl.appendChild(li); } Прикольная тема :) |
ну да тока вот with в strict режиме вроде как ошибку выдает... где-то я об этом читал... хотя может путаю.
|
Часовой пояс GMT +3, время: 06:18. |