Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未处理Dojo事件动态创建的事件_Javascript_Html_Events_Web_Dojo - Fatal编程技术网

Javascript 未处理Dojo事件动态创建的事件

Javascript 未处理Dojo事件动态创建的事件,javascript,html,events,web,dojo,Javascript,Html,Events,Web,Dojo,我有以下Dojo Javascript片段: postCreate: function () { this.inherited(arguments); var hitchWidgetToaddLevelButtonClickHandler = DojoBaseLang.hitch(this, addLevelButtonClickHandler); DojoOn(this.AddLevelButton, "click", hitchWidgetToaddLevelButt

我有以下Dojo Javascript片段:

postCreate: function () {
    this.inherited(arguments);
    var hitchWidgetToaddLevelButtonClickHandler = DojoBaseLang.hitch(this, addLevelButtonClickHandler);
    DojoOn(this.AddLevelButton, "click", hitchWidgetToaddLevelButtonClickHandler);

    function addLevelButtonClickHandler() {
                hierarchyLevelNumber += 1;
                var myButton = new Button({
                    label: "Click me!",
                    id: "level_button_" + hierarchyLevelNumber,
                    onClick: function(){
                        // Do something:
                        console.log("Hello there, ");
                    }
                }).placeAt(someNode,"last").startup();

                    var registeredRemovalButton = DijitRegistry.byId(("level_button_" + hierarchyLevelNumber));
                    DojoOn(registeredRemovalButton, "click", function someFunction() {
                        console.log("how are you?");
                    });
    }
}
和下面的HTML

<div id="settingsBorderContainer" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline', gutters:false, region:'top'" class="${theme}">

    <table data-dojo-attach-point="HierarchyLevelsTable">
        <tr>
            <th>Level</th>
            <th> Table Name </th>
            <th> Column Name</th>
        </tr>
        <td id="someNode">
        </td>
    </table>
</div>

水平仪
表名
列名
这里的目标是,当单击AddLevelButton时,它会在表中动态创建一行,其中包含必要的信息,并为每一行创建一个新按钮。请注意,为了说明我的问题,HTML和Javascript在很大程度上被简化了。我没有包括
addLevelButtonClickHandler()
方法中出现的所有行逻辑。HTMl是按预期构建的,如以下屏幕截图所示:

问题是,每次我添加按钮时,只有最后一个按钮的事件侦听器工作,即在屏幕截图中,按钮以红色日志圈起来:
您好,您调用了移除处理程序[object MouseeEvent]
,表中的上一个按钮不再可以单击并捕获必要的事件。抱歉,如果代码是我的目标的一个粗略简化,我感谢任何提供的帮助

*********编辑**************

所以我采取了一种不同的方法,总共只放了1个按钮,并从下到上逐级删除。只要它位于
之外,它就可以正常工作。这让我得出这样的结论:在损失了很多小时后,千万不要在表格中放置DIJIT或按钮,如果您首先绝对需要一张表格,我建议您使用
在有人能够解释为什么内表方法不起作用之前,我不会回答这个问题

在使用dojo时。决不能使用
node.innerHTML
添加或更新节点。它基本上将所有dijit转换为HTML字符串,并通过浏览器解析为常规HTML。这反过来会破坏dom对象和与其关联的事件


相反,使用
dojo/dom construct
创建dom对象,并为dom节点添加
appendChild
,或者在容器dijit的情况下添加
addChild

问题似乎不在上面的代码共享中。我的猜测是,添加行时会出现一些问题。创建行时是否使用
innerHTML
?否,每一行有三个元素和(反映文本)以及按钮所在的另一个元素。下面是一个示例,其中包含一行从表中生成的HTML类型,以及一些其他javascript,以了解它是如何完成的。您看到任何明显的问题了吗?JS fiddle不包含任何javascript代码。@TKambi您使用的是
this.HierarchyLevelsTable.innerHTML
。通过更新
innerHTML
,您正在销毁事件附加到的dom节点通过表的
innerHTML
属性的追加操作创建的行被添加到表中,这导致按钮的事件监听器被销毁,正如T Kambi上面解释的那样!