Имеет ли Dojo эквивалент jQuery.trigger()?

В jQuery вы можете сделать это:

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

Как это сделать в Dojo?

Ответ 1

Я не думаю, что 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().

Попробуйте

Ответ 2

Метод dojo on.emit (1.7+) может использоваться для запуска события на dom node. На странице документации:

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

Для некоторых виджетов dijit и конкретных событий (например, 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>

Ответ 6

Как упоминается в последнем комментарии, вы можете использовать dijit как чистый объект DOM через 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

Да, вы можете инициировать событие в элементе DOM в Dojo следующим образом:

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