Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как передать элемент в функцию после createElement


Автор: OlegNT 22.6.2008, 20:29
В объекте dropdown есть метод:

Код

this.highlightItem = function(item, mode)
{


И в сторонке есть еще один код:

Код

dropdown.LIs[i] = document.createElement('li');
dropdown.LIs[i].onmouseover = function() { dropdown.highlightItem(dropdown.LIs[i], 'over'); };
dropdown.ul.appendChild(dropdown.LIs[i]);


Метод .highlightItem сообщает, что аргумент item не определен.

В чем проблема? В том, что после appendChild созданное с помощью document.createElement('li') становится неопределенным? Тогда как решить проблему?

Автор: Itsys 22.6.2008, 21:26
Сначала создать объект, сделать appendChild, получить на него ссылку (getElementById либо через ирархию dropdown.ul) и затем уже dropdown.LIs[i] присваивать эту ссылку и в конце определять обработчик onmouseover

Автор: OlegNT 22.6.2008, 21:37
Код

var _el = document.createElement('li');
_el.id = dropdown.title + '_li_' + i;
dropdown.ul.appendChild(_el);

//позже

document.getElementById(dropdown.title + '_li_' + i).onmouseover = function() { dropdown.highlightItem(document.getElementById(dropdown.title + '_li_' + i), 'over'); };


Все равно item is null

Автор: OlegNT 22.6.2008, 22:35
Проблема оказалась вот в чем:

Код

document.getElementById(dropdown.title + '_li_' + i).onmouseover = function() { dropdown.highlightItem(document.getElementById(dropdown.title + '_li_' + i), 'over'); };

— этот код используется в цикле. Перед циклом объявлено
Код

var i = 0;


Последняя строчка в теле цикла:
Код

++i;


В итоге в функции dropdown.highlightItem передается аргумент «dropdown.title + '_li_' + i», где i — конечное значение, т.е. количество элементов LI (кол-во итераций цикла) плюс один. Ествественно, такого элемента нет, поэтому getElementById() возвращает null.

Как передать в функцию ТЕКУЩЕЕ значение параметра i ?

Автор: Itsys 23.6.2008, 00:31
при создании элемента
Код

_el.i = i;

потом
Код

document.getElementById(dropdown.title + '_li_' + i).onmouseover = function() { dropdown.highlightItem(document.getElementById(dropdown.title + '_li_' + this.i), 'over'); };

Автор: OlegNT 23.6.2008, 00:35
Спасибо огромное!
Вопрос решен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)