Dojo是否具有与jQuery.trigger()相同的功能?

时间:2011-02-15 10:27:30

标签: jquery events dojo

在jQuery中,你可以这样做:

$('#myElement').trigger('change');

我如何在Dojo中做到这一点?

7 个答案:

答案 0 :(得分:36)

dojo on.emit方法(1.7+)可用于触发dom节点上的事件。从文档页面:

require(["dojo/on"], function(on){
    // register event handler
    on(target, "mouseup", function(e){
        // handle event
    });

    // Send event
    on.emit(target, "mouseup", {
        bubbles: true,
        cancelable: true
    });
});

答案 1 :(得分:6)

我认为Dojo没有类似的功能,至少在我知道/不能找到的情况下。但您可以使用以下代码来复制此功能:

dojo.addOnLoad(function() {

    var button = dojo.byId("myButton");
    dojo.connect(button, "onclick", function() { alert("Clicked!"); });

    // IE does things differently
    if (dojo.isIE)
    {
        button.fireEvent("onclick");
    }
    else
    { // Not IE
        var event = document.createEvent("HTMLEvents");
        event.initEvent("click", false, true);
        console.debug(event);
        button.dispatchEvent(event);
    }
});

肯定会有点冗长,但你可以用它创建自己的dojo版本的trigger()。

Try it out

答案 2 :(得分:4)

对于某些dijit小部件和djit特定事件(例如onChange),您可以通过调用事件名称来“触发”事件。

<input id="numberBox" data-dojo-type="dijit.form.NumberTextBox" /> 

<script>
    dojo.connect( dijit.byId('numberBox'), "onChange", function ( event ) { 
        dijit.byId('numberBox').set('value', 12345 );
    }); 

    dijit.byId('numberBox').onChange();
</script>

答案 3 :(得分:2)

我最近偶然发现了Dojo的发布/订阅机制,我认为这是jQuery绑定/触发器的对应物。

链接:

答案 4 :(得分:1)

PlugD有dojo.trigger以及更多:https://github.com/phiggins42/plugd

答案 5 :(得分:0)

如上一条评论所述,通过dom API访问dijit为纯DOM对象。

require(["dojo/dom",
        'dojo/on',
        "dojo/domReady!"], function (dom, on) {

        //Does not work
        //registry.byId('myButton') 
        //registry.byId('myButton').domNode
  
        //Proper way
        on.emit(dom.byId('myButton'), "click", {
                bubbles: true,
                cancelable: true
        });

});

答案 6 :(得分:0)

是的,您可以在Dojo中触发DOM元素上的事件,如下所示:

dojo.byId("myElement").onChange();