Dojo 是不是有等效于 jQuery.trigger() 的功能?
Posted
技术标签:
【中文标题】Dojo 是不是有等效于 jQuery.trigger() 的功能?【英文标题】:Does Dojo have an equivalent to jQuery.trigger()?Dojo 是否有等效于 jQuery.trigger() 的功能? 【发布时间】:2011-02-15 10:27:30 【问题描述】:在 jQuery 中,你可以这样做:
$('#myElement').trigger('change');
我如何在 Dojo 中做到这一点?
【问题讨论】:
【参考方案1】: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.7版本后可用。 另外,第三个参数必须传递一个对象(即使是空的)。 似乎无法让偶数的发送部分实际触发它。你能提供一个小提琴吗? 好的,找出问题所在。 “目标”必须是 DOM 节点本身,而不是 dijit 实例。谢谢!【参考方案2】:我认为 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()。
Try it out
【讨论】:
这种问题让我怀念 jQuery 的纯粹简单性.. :p 是的,与自行车相比,汽车“荒谬而困难”【参考方案3】:对于某些 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>
【讨论】:
【参考方案4】:我最近偶然发现了 Dojo 的发布/订阅机制,我认为这是 jQuery 的绑定/触发器的对应物。
链接:
Events with Dojo (v1.6)dojo.publish
reference guide
【讨论】:
【参考方案5】:PlugD 有 dojo.trigger
和更多:https://github.com/phiggins42/plugd
【讨论】:
【参考方案6】:是的,您可以像这样在 Dojo 中的 DOM 元素上触发事件:
dojo.byId("myElement").onChange();
【讨论】:
其实是这样。我只想说,道场并没有那么荒谬和困难。【参考方案7】:正如上一条评论中提到的,通过 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
);
);
【讨论】:
以上是关于Dojo 是不是有等效于 jQuery.trigger() 的功能?的主要内容,如果未能解决你的问题,请参考以下文章
在 jQuery 中的元素 this 的 Dojo 中等效吗?