Javascript 如何确定单击了哪个小部件?道场

Javascript 如何确定单击了哪个小部件?道场,javascript,dojo,Javascript,Dojo,有没有办法观察鼠标单击事件并确定单击了哪个小部件 所以基本上我希望我能做这样的事情(在页面上的任何地方单击鼠标) 可能会有很多开销,但你可以 require(["dojox/mobile/deviceTheme","dojo/on","dijit/registry"],function(theme,on,reg){ on(document,'click', function(e){ console.log(e.target); var widget = reg.byNod

有没有办法观察鼠标单击事件并确定单击了哪个小部件

所以基本上我希望我能做这样的事情(在页面上的任何地方单击鼠标)


可能会有很多开销,但你可以

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);
  });
});

可能会有很多开销,但你可以

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实例都必须附加
文档
单击
事件。

可以,但这需要一些额外的步骤。
基本上,逻辑是: -当你点击一个节点时,你必须在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实例都必须附加
文档
单击
事件。

为什么不需要
dojox/mobile/deviceTheme
,这只是我测试代码的一部分,所以我会得到css:你说多个dojo实例是什么意思?虽然这是可行的,但我发现当我单击包含另一个小部件的小部件时,它只返回最内部的小部件。例如,包含dijit表单元素的自定义小部件返回表单元素小部件,具体取决于您在自定义小部件上单击的位置。在某些设置中,可以在同一页面中加载多个dojo版本。如果这是您的情况,您将无法用这种方式获取小部件。显然,dijit是小部件,因此当单击它们的内部节点时,您会找到它们。如果您只需要查找某些特定类型的小部件,则必须继续在节点中查找,直到
registry.byNode(目标)
为您搜索的类提供了一个
实例。您所说的多个dojo实例是什么意思?虽然这是可行的,但我发现当我单击包含另一个小部件的小部件时,它只返回最内部的小部件。例如,包含dijit表单元素的自定义小部件根据您单击自定义小部件的位置返回表单元素小部件。在某些设置中,可以在同一页面中加载多个dojo版本。如果这是您的情况,您将无法用这种方式获取小部件。显然,dijit是小部件,因此当单击它们的内部节点时,您会找到它们。如果您只需要查找某些特定类型的小部件,则必须继续在节点中查找,直到
registry.byNode(目标)
为您正在搜索的类提供一个
实例