关于html按钮上的dojo onclick事件的问题

时间:2012-12-11 09:02:05

标签: javascript html dojo

我是一个带有dojo的新手,我遇到了一个奇怪的问题,我花了很多时间并且还没有发现,假设我有4个按钮:

<button id="btnMoveFirst" data-dojo-type="dijit.form.Button" iconclass="plusIcon">
    &lt; &lt;</button>
<button id="btnMovePrev" data-dojo-type="dijit.form.Button" iconclass="plusIcon">
    &lt;</button>
<button id="btnMoveNext" data-dojo-type="dijit.form.Button" iconclass="plusIcon">
    &gt;</button>
<button id="btnMoveLast" data-dojo-type="dijit.form.Button" iconclass="plusIcon">
    &gt; &gt;</button>

使用dojo和事件 onclick ,如下所示:

dojo.connect(dijit.registry.byId('btnMoveFirst'), "onclick",  function(evt){
    alert('test1');
});

dojo.connect(dijit.registry.byId('btnMovePrev'), "onclick",  function(evt){
     alert('test2');
});

dojo.connect(dijit.registry.byId('btnMoveNext'), "onclick",  function(evt){
     alert('test3');
});

dojo.connect(dijit.registry.byId('btnMoveLast'), "onclick",  function(evt){
     alert('test4');
});

但是当我点击4个按钮中的任何一个,甚至是表格​​中的任何一个按钮时,我收到4个警报而不是正确的警告。

有谁知道这个?

1 个答案:

答案 0 :(得分:1)

我得到4个警报而不是只有正确的一个的原因是:

  • 按钮在调用dojo.connect时没有实例化→将代码包装到dojo/ready
  • 连接到不存在的方法→连接到 onClick 而不是 onclick

根据讨论,以下是如何在Modern Dojo中的问题中编写代码的方式:

require([
    "dojo/ready",
    "dojo/aspect",
    "dijit/registry",
    "dijit/form/Button"
], function(
    ready,
    aspect,
    registry
) {

    ready(function() {

        // dojo/Evented
        registry.byId("btnMoveFirst").on("click", function() {
            console.log("first");        
        });

        // dojo/aspect 
        // it's the same as dojo.connect in previous versions
        // nevertheless this is not recommended
        aspect.after(registry.byId("btnMoveLast"), "onClick", function() {
            console.log("last");            
        });       

    });

});

工作示例:http://jsfiddle.net/phusick/355MT/