在jQuery中,你可以这样做:
$('#myElement').trigger('change');
我如何在Dojo中做到这一点?
答案 0 :(得分:36)
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
});
});
答案 1 :(得分:6)
我认为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 :(得分:4)
对于某些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>
答案 3 :(得分:2)
我最近偶然发现了Dojo的发布/订阅机制,我认为这是jQuery绑定/触发器的对应物。
链接:
答案 4 :(得分:1)
PlugD有dojo.trigger
以及更多:https://github.com/phiggins42/plugd
答案 5 :(得分:0)
如上一条评论所述,通过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
});
});
答案 6 :(得分:0)
是的,您可以在Dojo中触发DOM元素上的事件,如下所示:
dojo.byId("myElement").onChange();