Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

JavaScript, динамические обработчики событий

422
28 сентября 2007 года
Dimarik
181 / / 12.02.2005
Здравствуйте!

Вот такая проблема.
Динамически создаётся объект в DOM

var separator=document.createElement("div");
separator.className="separator";

Ему динамически назначаются обработчики на некторые события:
separator.onmouseover=(function (e){return over_color(this);});
separator.onmouseout=(function (e){return out_color(this);});
separator.onmouseup=(function (e){return changePlace(this);});

потом добавляем
child.appendChild(separator);

Дальше этот элемент мы перемещаем по всему дереву DOM, и после перемещения эти обработчики почему-то не срабатывают.
В чём проблема?
27K
28 сентября 2007 года
AKS.
34 / / 27.08.2007
Цитата: Dimarik

separator.onmouseover=(function (e){return over_color(this);});


Почему функции в скобках? Заче нужен бесполезный лишний оператор?
По-существу - что значит "перемещаем по всему дереву DOM"?

92
28 сентября 2007 года
Тень Пса
2.2K / / 19.10.2006
скобки убери, и будет всё окей. (AKS. +1)

 
Код:
separator.onmouseup = function (e) { ...; };
422
29 сентября 2007 года
Dimarik
181 / / 12.02.2005
Тема со скобками к сожадению не помогла, но всё равно спасибо за неравнодушие.
Помогло изменение спосба перемещения узла. Т.е. раньше делалось как:

var copyCurrentNode=currentNode.parentNode.cloneNode(true);
separator.parentNode.insertBefore(currentNode.parentNode, separator); // добавление узла в новый узел
chilNode.removeChild(currentNode.parentNode); // удаление перемещаемого узла из старого места

Т.е. делал сначала копию перемещаемого узла, а потом вставлял эту копию в нужное место, и сам узел удалял.
Сейчас поменял на такой порядок действий, и всё как-то заработало:

chilNode.removeChild(currentNode.parentNode); // удаление перемещаемого узла из старого места separator.parentNode.insertBefore(currentNode.parentNode, separator); // добавление узла в новый узел

только объяснить не могу, с чем это связано :)
12
29 сентября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: Dimarik

только объяснить не могу, с чем это связано :)


С незнанием. А алгоритм работы у тебя любопытный... даже представить не могу, для какой задачи это все нужно было накручивать.

7.9K
29 сентября 2007 года
vasa_c
191 / / 05.04.2007
Dimarik, insertBefore() одного хватит, удалять не надо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог