JavaScript, динамические обработчики событий
Вот такая проблема.
Динамически создаётся объект в 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, и после перемещения эти обработчики почему-то не срабатывают.
В чём проблема?
Цитата: Dimarik
separator.onmouseover=(function (e){return over_color(this);});
Почему функции в скобках? Заче нужен бесполезный лишний оператор?
По-существу - что значит "перемещаем по всему дереву DOM"?
Код:
separator.onmouseup = function (e) { ...; };
Помогло изменение спосба перемещения узла. Т.е. раньше делалось как:
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); // добавление узла в новый узел
только объяснить не могу, с чем это связано :)
Цитата: Dimarik
только объяснить не могу, с чем это связано :)
С незнанием. А алгоритм работы у тебя любопытный... даже представить не могу, для какой задачи это все нужно было накручивать.
Dimarik, insertBefore() одного хватит, удалять не надо.