如何确定点击了哪个小部件?道场
How to determine which widget was clicked? Dojo
有没有办法观察鼠标点击事件,判断点击的是哪个widget?
所以基本上我希望我能做这样的事情(鼠标点击页面上的任何地方)
on("click", function (e) {
//var aWidget = dijit.getEnclosingWidget(e.target);
//var id = aWidget.id
//do something based on the widget id
});
可能会有很多开销,但是可以
require(["dojox/mobile/deviceTheme","dojo/on","dijit/registry"],function(theme,on,reg){
on(document,'click', function(e){
console.log(e.target);
var widget = reg.byNode(e.target);
console.log("foundWidget::" + widget.id);
});
});
可以,但需要一些额外的步骤。
基本上,逻辑是:
- 当你点击一个节点时,你必须在DOM中往上走,直到找到属性为widgetId
的节点
- 当你拥有它时,使用 dijit/registry::byNode
来获取小部件。
如果跳过节点遍历,则只有在单击小部件的主要 domNode
时才会找到小部件。
require(['dojo/on', 'dijit/registry'], function(on, registry){
on(document, 'click', function(event){
var target = event.target,
widget;
while(!target.getAttribute('widgetId') && target.parentNode) {
target = target.parentNode;
}
widget = registry.byNode(target);
console.warn(widget);
});
});
请注意,如果您在页面中加载了 1 个 dojo 实例,此方法仅有效。
如果您的页面有多个 dojo 实例,那么每个 dojo 实例都必须附加 document
click
事件。
有没有办法观察鼠标点击事件,判断点击的是哪个widget?
所以基本上我希望我能做这样的事情(鼠标点击页面上的任何地方)
on("click", function (e) {
//var aWidget = dijit.getEnclosingWidget(e.target);
//var id = aWidget.id
//do something based on the widget id
});
可能会有很多开销,但是可以
require(["dojox/mobile/deviceTheme","dojo/on","dijit/registry"],function(theme,on,reg){
on(document,'click', function(e){
console.log(e.target);
var widget = reg.byNode(e.target);
console.log("foundWidget::" + widget.id);
});
});
可以,但需要一些额外的步骤。
基本上,逻辑是:
- 当你点击一个节点时,你必须在DOM中往上走,直到找到属性为widgetId
的节点
- 当你拥有它时,使用 dijit/registry::byNode
来获取小部件。
如果跳过节点遍历,则只有在单击小部件的主要 domNode
时才会找到小部件。
require(['dojo/on', 'dijit/registry'], function(on, registry){
on(document, 'click', function(event){
var target = event.target,
widget;
while(!target.getAttribute('widgetId') && target.parentNode) {
target = target.parentNode;
}
widget = registry.byNode(target);
console.warn(widget);
});
});
请注意,如果您在页面中加载了 1 个 dojo 实例,此方法仅有效。
如果您的页面有多个 dojo 实例,那么每个 dojo 实例都必须附加 document
click
事件。