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, время: 01:36. |