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

标签 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 中不会出现该问题。

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

最佳答案

beuss 在 Dojo-IRC 上回答:

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

更新的 fiddle :http://jsfiddle.net/YCJ6X/1/

关于javascript - 为什么连接的 onclick 事件不触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767554/

相关文章:

javascript - 可以在 localStorage 中保存元素位置吗? (Jquery可拖动)

javascript - 如何在 setInterval() 方法后设置 "stop"?

javascript - 为什么我的所有 DOM 元素属性都返回为空字符串?

javascript - 无法正确使用json响应

javascript - Onblur 事件绑定(bind)

c# - 事件与可重写的方法?

javascript - 如何针对事件流定位 GUI 的特定对象?

javascript - 如何以编程方式滚动到 dojo contentPane 中的某个元素

zend-framework - 搜索一个值并在 Dojo FilteringSelect 上显示另一个值

javascript - 如何确定哪个小部件被点击?道场