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

一世执手 提交于 2019-11-27 06:42:56

问题


In jQuery, you can do this:

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

How do I do that in Dojo?


回答1:


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




回答2:


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



回答3:


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>



回答4:


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



回答5:


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




回答6:


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

});



回答7:


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

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


来源:https://stackoverflow.com/questions/5002478/does-dojo-have-an-equivalent-to-jquery-trigger

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!