Button dojo.connect-won';t连接';onclick';带按钮

Button dojo.connect-won';t连接';onclick';带按钮,button,dojo,onclick,connect,Button,Dojo,Onclick,Connect,我在使用dojo.connect()连接带有此按钮的“onclick”事件时遇到问题: <button dojoType="dijit.form.Button" widgetId="inbox_button" id="inbox_button">Inbox</button> 但是,不是在单击按钮时执行函数,而是任何onclick事件都会触发函数,最后我得到了很多子容器 尽管我非常确定.connect()函数应该作为dojo基本功能的一部分提供,但我已经明确地“要求”了它

我在使用dojo.connect()连接带有此按钮的“onclick”事件时遇到问题:

<button dojoType="dijit.form.Button" widgetId="inbox_button" id="inbox_button">Inbox</button>
但是,不是在单击按钮时执行函数,而是任何onclick事件都会触发函数,最后我得到了很多子容器

尽管我非常确定.connect()函数应该作为dojo基本功能的一部分提供,但我已经明确地“要求”了它:

dojo.require("dojo._base.connect");

关于为什么会发生这种情况有什么想法吗?

回答我自己的问题:永远不要低估dojo.addOnLoad的价值

我觉得,由于按钮被用作小部件,它的ID直到Dojo完成加载后才被注册,而且由于连接代码不在addOnLoad块中,所以它找不到(尚未加载)按钮。因此,该方法在每次单击事件时触发的原因是Dojo在connect()函数中处理空对象的方式:它忽略这些对象,而是使用Dojo.global(Dojo的document.window版本)作为对象


我希望这能帮助其他可能遇到类似问题的人

正如您所说,如果在DOM准备就绪之前运行该代码,dojo.byId(“收件箱按钮”)将返回null。因此,您的连接实际上是:

dojo.connect(null, "onclick", function() { ... })
。。如果dojo.connect的第一个参数为null,则将使用全局或“窗口”对象

但是,这只是一个错误。您的button元素正在被小部件化,并变成dijit.form.button。因此,您应该在此处连接到小部件的onClick方法,而不是节点的onClick:

dojo.connect(dijit.byId("inbox_button"), "onClick", function() { ... });

另外,需要明确的是,您永远不必在dojo.js中要求任何东西。_base,这是dojo.js向您做出的承诺——它的一切都捆绑在一起

谢谢,我把所有的按钮都改了。不过有一个问题:使用dojo.byId(“x”)和onclick是可行的,那么为什么会首选使用dijit/onclick呢?
dojo.connect(dijit.byId("inbox_button"), "onClick", function() { ... });