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

Posted

技术标签:

【中文标题】为啥连接的 onclick 事件不会触发?【英文标题】:Why does a connected onclick event not fire?为什么连接的 onclick 事件不会触发? 【发布时间】:2011-10-14 12:26:50 【问题描述】:

我正在开发一个自定义的 dojo 小部件。在小部件中,我动态创建了一些 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);

现在,正如您可能从 cmets 中猜到的那样,条件嵌套元素上的事件不会被触发。

即使我在treeItem 上注释掉了连接(顺便说一句),我也没有成功。我试过treeItemExpander.onclick = function () ... 也无济于事。唯一有效但在小部件中没有意义的是treeItemExpander.setAttribute("onClick", "alert('test');");

编辑:我对这个问题做了一个小调:http://jsfiddle.net/YCJ6X/

编辑:jovica(在dojo-IRC)发现问题在ubuntu上的Chrome中没有出现。

那么我如何获得附加到该图像的事件?

【问题讨论】:

您是否尝试过使用字符串“click”而不是“onclick”作为事件名称? edit 没关系,dojo 看起来很酷,“on” ... 【参考方案1】:

由 Dojo-IRC 上的 beuss 回答:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于为啥连接的 onclick 事件不会触发?的主要内容,如果未能解决你的问题,请参考以下文章

JS中使用innerHTML后元素的onclick事件为啥不能触发了?

为啥div里的onclick()事件不起作用?不会jq

javascript 为啥按钮的onclick事件不触发 按了没反应

为啥div里的onclick()事件不起作用?不会jq

访问表单 VBA ComboBox 点击事件

为啥 GridView 中的 LinkBut​​ton 不会引发其 OnClick 事件?