【发布时间】:2011-02-15 10:27:30
【问题描述】:
在 jQuery 中,你可以这样做:
$('#myElement').trigger('change');
我如何在 Dojo 中做到这一点?
【问题讨论】:
在 jQuery 中,你可以这样做:
$('#myElement').trigger('change');
我如何在 Dojo 中做到这一点?
【问题讨论】:
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
});
});
【讨论】:
我认为 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()。
【讨论】:
对于某些 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>
【讨论】:
我最近偶然发现了 Dojo 的发布/订阅机制,我认为这是 jQuery 的绑定/触发器的对应物。
链接:
【讨论】:
PlugD 有 dojo.trigger 和更多:https://github.com/phiggins42/plugd
【讨论】:
是的,您可以像这样在 Dojo 中的 DOM 元素上触发事件:
dojo.byId("myElement").onChange();
【讨论】:
正如上一条评论中提到的,通过 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
});
});
【讨论】: