开发者

Does Dojo have an equivalent to jQuery.trigger()?

In jQuery, you 开发者_运维问答can do this:

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

How do I do that in Dojo?


The dojo on.emit method (1.7+) can be used to trigger an event on a dom node. From the documentation page:

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


I don't think Dojo has similar functionality, at least as not as far as I know / can find. But you can use code like the following to replicate this functionality:

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

A little more verbose, for sure, but you would be able to create your own Dojo version of trigger() with it.

Try it out


For certain dijit widgets and djit specific events ( such as onChange ), you can de-facto 'trigger' by calling the event name.

<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>


I recently stumbled upon Dojo's publish/subscribe mechanism, and I think this is the counterpart to jQuery's bind/trigger.

Links:

  • Events with Dojo (v1.6)
  • dojo.publish reference guide


PlugD has dojo.trigger and more: https://github.com/phiggins42/plugd


Yes, you can trigger an event on a DOM element in Dojo like this:

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


As mention in the last comment, access dijit as pure DOM Object via dom API.

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

});

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜