Dojo是否有jQuery.trigger()的等价物?

von4xj4u  于 2022-12-16  发布在  Dojo
关注(0)|答案(7)|浏览(194)

在jQuery中,您可以这样做:

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

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

hsgswve4

hsgswve41#

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
    });
});
cunj1qz1

cunj1qz12#

我认为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

idfiyjo8

idfiyjo83#

对于某些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>
guykilcj

guykilcj4#

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

368yc8dk

368yc8dk6#

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

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

vecaoik17#

正如上一条评论中提到的,通过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
        });

});

相关问题