Javascript 由于语法分析器的原因,Dojo事件不起作用

Javascript 由于语法分析器的原因,Dojo事件不起作用,javascript,dojo,Javascript,Dojo,我的代码片段 <div id="mainMenu" data-dojo-type="dijit/MenuBar"> <div id="edit" data-dojo-type="dijit/MenuBarItem">Add Hero</div> <div id="view" data-dojo-type="dijit/MenuBarItem">Grid View</div>

我的代码片段

<div id="mainMenu" data-dojo-type="dijit/MenuBar">
            <div id="edit" data-dojo-type="dijit/MenuBarItem">Add Hero</div>
            <div id="view" data-dojo-type="dijit/MenuBarItem">Grid View</div>
            <div id="task" data-dojo-type="dijit/MenuBarItem">Detailed View</div>
        </div>
    <script >
        var dojoConfig = {
            async: 1,
            parseOnLoad: 0
        };      
    </script>
    <script>
    require([
                   "dojo/dom",
                    "dojo",
                    "dojo/parser",
                    "dojo/query",
                    "dojo/on",
                    "dijit/Menu",
                    "dojo/domReady!"
                ], function(dom,dojo ,parser, query,on){

                    //var result = query("#edit");
                    var myButton=dojo.byId("edit");console.log(myButton);
                    on(myButton, "click", function(){
                        alert("Cliked on menu item");
                    });

                });
    </script>

添加英雄
网格视图
详细视图
var dojoConfig={
异步:1,
parseOnLoad:0
};      
要求([
“dojo/dom”,
“道场”,
“dojo/parser”,
“dojo/query”,
“dojo/on”,
“dijit/菜单”,
“dojo/domReady!”
],函数(dom、dojo、解析器、查询等){
//var结果=查询(“#编辑”);
var myButton=dojo.byId(“编辑”);console.log(myButton);
打开(我的按钮,“单击”,函数(){
警告(“在菜单项上点击”);
});
});

我的目标是在单击时显示菜单名。但问题是解析器事件不会被触发。如果我将
parseOnLoad
更改为
0
flase
,那么我将收到警告消息,但菜单受到干扰,如果我将
parseOnLoad
设置为
1
则单击事件不起作用?

虽然您的代码可能对DOM节点起作用,但对小部件(dijit)不起作用。这也是当您禁用
parseOnLoad
功能时它工作的原因,因为您从未将DOM节点解析为小部件。这意味着您的DOM事件将起作用,但当然,菜单从未作为小部件创建,因此您的菜单存在问题

现在,要解决此问题,需要使用
dijit/registry
检索菜单项:

var myButton=registry.byId(“编辑”);
dojo/on
模块仅用于DOM事件,因此您也必须替换它。幸运的是,widget对象(即您使用注册表检索的对象)已经有了一个
on()
函数(请参阅),我们可以这样使用它:

myButton.on(“单击”,函数(){
警告(“在菜单项上点击”);
});
我们最不需要更改的是初始DOM加载事件(
dojo/domReady!
)。小部件在加载DOM后被解析。这意味着如果我们监听DOM就绪事件,我们将无法检索小部件。用于检查是否加载了DOM和是否解析了小部件的事件处理程序是通过使用
dojo/ready
模块来实现的。它的语法与dojo/domReady稍有不同插件,因为我们这样使用它:

ready(函数(){
//你的代码
});
或者在您的情况下:

ready(函数(){
var myButton=registry.byId(“编辑”);
console.log(myButton);
myButton.on(“单击”,函数(){
警报(“单击菜单项”);
});
});

完整的示例也可以在中找到。

您是否可以发布编辑按钮的HTML代码?现在我认为您正在使用DOM事件,而实际上您正在尝试使用小部件事件