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
});
});
精彩评论