Почему подключенное событие onclick не срабатывает? - PullRequest
2 голосов
/ 14 октября 2011

Я работаю над пользовательским виджетом додзё. Внутри виджета я динамически создаю несколько DOM-узлов и подключаю функции к их событиям.

Мой код выглядит примерно так:

var treeItem = document.createElement("div");

if (current.children) // 'current' is set up like: { id: <int>, name: <string>[, children: <id-array>] }
{
    var treeItemExpander = document.createElement("img");
    [...] // stuff like setting classes and setting the path, nothing special
    dojo.connect(treeItemExpander, "onclick", function () { alert("test expander"); }); // problem line
    treeItem.appendChild(treeItemExpander);
}

treeItem.innerHTML += current.name;
dojo.connect(treeItem, "onclick", function () { alert("test item"); });

this.tree.appendChild(treeItem);

Теперь, как можно догадаться из комментариев, событие условно-вложенного элемента не запускается.

Даже когда я закомментировал соединение на treeItem (который работает, кстати), у меня не было успеха. Я пытался treeItemExpander.onclick = function () {...} тоже безрезультатно. Единственное, что сработало, но не имеет смысла в виджете, было treeItemExpander.setAttribute("onClick", "alert('test');");.

Редактировать : Я сделал скрипку с вопросом: http://jsfiddle.net/YCJ6X/

Редактировать : jovica (в dojo-IRC) обнаружил, что проблема не возникает в Chrome на Ubuntu.

Так как мне прикрепить событие к этому изображению?

Ответы [ 2 ]

3 голосов
/ 14 октября 2011

Ответ beuss на IRC Dojo:

Изменение innerHTML также изменяет ранее добавленные узлы DOM. Добавление текстового узла вместо написания текста напрямую решает проблему.

Обновленная скрипка: http://jsfiddle.net/YCJ6X/1/

0 голосов
/ 14 октября 2011

Попробуйте прикрепить событие после добавления элемента.Я думаю, что это решит вашу проблему.

...