为什么连接的onclick事件不会触发?

时间:2011-10-14 12:26:51

标签: javascript events dojo widget

我正在开发一个自定义的dojo-widget。在小部件中,我动态创建一些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上)发现在ubuntu上的Chrome中没有出现此问题。

那么如何将事件附加到该图像?

2 个答案:

答案 0 :(得分:3)

在Dojo-IRC上通过 beuss 回答:

修改innerHTML也会更改以前添加的DOM节点。添加文本节点而不是直接编写文本可以解决问题。

更新了小提琴:http://jsfiddle.net/YCJ6X/1/

答案 1 :(得分:0)

尝试在追加元素后附加事件。 我想这可以解决你的问题。