单击使用 Dojo 时如何获取父级 div?

How to get the parent div when using Dojo on click?

我正在动态创建一个 div 对象,然后根据用户查询的数据向其附加 spans

我正在使用 on(featureDiv, "click", featureClicked);

然后我有:

function featureClicked(result) {
    console.log(result);
}

我遇到的问题是 returns span 对象(如果单击的是该对象)。但是,我只想获得 div,因为我放置了一个我需要访问的唯一 ID,以便在另一个查询中使用,具体取决于用户选择的 div

如何使用 on 始终使用 div 对象而不是 span 对象?

你需要了解这里的点击事件是如何工作的。当事件已附加到父元素并且事件从子元素触发时,event.target 属性 将 return 触发事件的元素。 event.currentTarget 属性 将 return 附加事件的元素,即父元素。

因此,要获取 div 元素,您必须访问 event.currentTarget 属性。

引用自this blog post

  • event.target is the node from which the event originated, ie. wherever you place your event listener (on <p> or <span>), event.target refers to node (where user clicked)

  • event.currentTarget, on the opposite, refers to the node on which current-event listener was attached. Ie. if we attached our event listener on <p> node, then event.currentTarget refers to <p> while event.target still refers to <span>.

如@Himanshu 所述,将点击事件附加到您的 div 时,

要获取附加事件的元素,您必须使用 event.currentTarget

因此,如果您单击跨度,event.target 将引用当前单击的节点(跨度),而 event.currentTarget 将引用 div(其中活动已附加)。

请参阅下面的工作示例:

require(["dojo/dom-construct", "dojo/dom", "dojo/on", "dojo/parser", "dojo/ready"], function(domConstruct, dom, On, parser, ready) {
  ready(function() {
      var elment = domConstruct.create('div', {
        'id': 'myDivId'
      }, "container");

      var span1 = domConstruct.create('span', {
        'id': 'myspan1',
        'innerHTML': 'span 1<br>'
      },);
      var span2 = domConstruct.create('span', {
        'id': 'myspan2',
        'innerHTML': 'span 2<br>'
      },);


      domConstruct.place(span1, elment , "last");
      domConstruct.place(span2, elment , "last");

      
      On(elment, "click", function (evt) {
          console.log("click target elemnt id is : ",evt.target.id);
          console.log("click parent currentTarget : ",evt.currentTarget.id);
          dom.byId("event").innerHTML = "click on : "+evt.target.id+" event attached on :"+evt.currentTarget.id;
      });
    
  });
});
#myDivId {
  border:1px dotted black;
}
<script type="text/javascript">
  dojoConfig = {
    isDebug: true,
    async: true,
    parseOnLoad: true
  }
</script>

<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
<link href="//ajax.googleapis.com/ajax/libs/dojo/1.8.3/dijit/themes/claro/claro.css" rel="stylesheet" />
<div id="container"></div>

<strong><div id="event" style="color:green"></div></strong>