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事件,而实际上您正在尝试使用小部件事件