Javascript Dijit组合按钮/下拉菜单单击

Javascript Dijit组合按钮/下拉菜单单击,javascript,dojo,dom-events,Javascript,Dojo,Dom Events,我刚开始玩Dojo。我只是想在单击Dijit ComboButton下拉菜单中的一个项目时显示一个对话框。我尝试使用dojo.connect将onclick事件与一个函数相关联,该函数只会显示一个对话框,其中包含项目中的文本,但没有成功 我设法让它以一种可怕的方式工作。所有工作现在实际上都是手动写入onclick属性。我显然误解了一些事情。这就是我目前拥有的: JS: HTML: 收到所有邮件 雅虎 谷歌 我对Dojo有什么明显的误解? (或者可能我犯了一些简单的JavaScript错误)

我刚开始玩Dojo。我只是想在单击Dijit ComboButton下拉菜单中的一个项目时显示一个对话框。我尝试使用dojo.connect将onclick事件与一个函数相关联,该函数只会显示一个对话框,其中包含项目中的文本,但没有成功

我设法让它以一种可怕的方式工作。所有工作现在实际上都是手动写入onclick属性。我显然误解了一些事情。这就是我目前拥有的:

JS: HTML:

收到所有邮件
雅虎
谷歌

我对Dojo有什么明显的误解? (或者可能我犯了一些简单的JavaScript错误)



您应该能够通过以下方式完成

var myButton = dijit.byId('getmail');
myButton.on('click', function(){ alert('clicked') });
我的猜测是,在获取按钮时,您混淆了dojo.byId和dijit.byId——当您包含小写的“onclick”时,常规DOM节点可以工作,但小部件会触发驼峰大小写的“onclick”事件(区别在于dijit会触发一些键盘事件,以便于访问)

然而,对于较新版本的Dojo,最好不要使用Dojo.connect,而只使用simpler“.on”API



啊,在我忘记之前,您可能还忘记了运行Dojo解析器(或将parseOnLoad设置为true),因此按钮从未创建过。能否在JSFIDLE上提供一个完全可执行的示例?

parseOnLoad
设置为
true
。您提供的代码确实可以像您所说的那样工作,但我要做的是在单击下拉菜单中的项目时进行检测。真正的问题是为什么
getmail
函数必须在
dojo.ready
之外,为什么所有的工作都必须硬编码到
onclick
属性,而不是在
getmail()
中只存在一次?添加到question@AdamLynch:当然,您可以从onclick内部调用getmail,或者将getmail作为onclick处理程序传递。你确定这不是一个简单的范围界定问题吗?请记住,Javascript变量(和函数)仅在定义它们的函数内部可见。类似的东西不起作用。我试过很多类似的方法implementations@AdamLynch:
onClick:function()。因为您在另一个函数中定义了getmail,但事实并非如此。我如何才能像您所说的那样将getmail作为处理程序传递?
<form method="POST">

    <div data-dojo-type="dijit.form.ComboButton" id="getmail">

        <span>Get All Mail</span>

        <div data-dojo-type="dijit.DropDownMenu">

            <div data-dojo-type="dijit.MenuItem" 
                data-dojo-props="onClick:function(){getmail(dojo.trim(dojo.query('.dijitMenuItemLabel', this.domNode)[0].innerHTML))}">
                Yahoo</div> 

            <div data-dojo-type="dijit.MenuItem">Google</div>

        </div>

    </div>

</form>
var myButton = dijit.byId('getmail');
myButton.on('click', function(){ alert('clicked') });