首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较e.currentTarget和e.Target?

如何比较e.currentTarget和e.Target?
EN

Stack Overflow用户
提问于 2019-04-02 04:28:08
回答 2查看 5.3K关注 0票数 0

我得到的事件按钮点击和背景点击。在背景点击我得到的currentTarget和目标都相同,但如果按钮,我得到不同的。如果它们是相等的或不相等的,我如何比较,以便在相等的情况下,我可以执行一些操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-02 05:08:35

event.currentTarget指的是侦听器绑定到的element

在这个演示中,我们可以看到如果我们真的点击了div (可能是因为巨大的填充),那么匹配评估器e.target === e.currentTarget实际上是正确的。

代码语言:javascript
复制
document.querySelector('#test').addEventListener('click', (e) => {
  if(e.target === e.currentTarget) console.log('yes');
});
代码语言:javascript
复制
div#test {
  padding: 20px;
  background-color: red;
}

div#test p {
  background-color: blue;
}
代码语言:javascript
复制
<div id="test">
  Try clicking here and then the P
  <p id="test2">Test</p>
</div>

票数 2
EN

Stack Overflow用户

发布于 2019-04-02 08:42:18

事件对象有一些属性,其中3项是最重要的:

Event.target -引用“事件的起源”。在外行人的术语:点击按钮,文本框,用户已经输入文本,单选按钮用户已经选择,等等。

Event.currentTarget -引用已注册的事件侦听器/处理程序。如果currentTarget碰巧是其他标记的祖先--那么currentTarget也可以监听所有这些标记的事件。这是可能的,因为事件传播/冒泡,有关详细信息,请参阅事件委托

Event.type --基本上是点击、输入、更改、提交、重置、DOMContentLoaded等等。

事件委托的关键是找出Event.target (更改)是而不是 Event.currentTarget (除非未注册到事件),否则不会更改。

演示中注释的详细信息

代码语言:javascript
复制
// Reference <form>
const current = document.forms[0];
// Register <form> to click, input, and change events
current.onclick = current.oninput = current.onchange = manageEvt;

// Callback function passes Event Object (e)
function manageEvt(e) {
  // This is <form> - tag registered to event(s)
  const cur = e.currentTarget;
  // This is the tag that is event origin (clicked, changed, etc.)
  const tgt = e.target;
  // This is the event type (click, input, and change)
  const evt = e.type;
  /*
  "this" is currentTarget (<form>) 
  .elements is all form controls of "this"
  .out is the <output> id
  */
  const out = this.elements.out;

  // Clear <output>
  out.value = '';
  /*
  if clicked, inputted, or changed tag is NOT <form>...
  ...display message...
  Otherwise if only the <form> is clicked display another message.
  */
  if (tgt !== cur) {
    out.value = '#' + tgt.id + ' is Event.target for ' + evt.toUpperCase() + ' EVENT ------------------value: ' + tgt.value;

  }
  if (tgt === cur) {
    out.value = '#' + tgt.id + ' is Event.target and Event.currentTarget for ' + evt.toUpperCase() + ' EVENT';

  } 
}
代码语言:javascript
复制
form {
  border: 3px dashed red;
  padding: 30px;
}
代码语言:javascript
复制
<form id='CURRENT'>
  <button id='BUTTON' name='tgt' type='button' value="button">CLICK EVENT</button><br>
  <input id='TEXT' name='tgt' type='text' placeholder='INPUT EVENT'><br>
  <input id='RADIOA' name='tgt' type='radio' value="A"> A
  <input id='RADIOB' name='tgt' type='radio' value="B"> B<br>

  <output id='out'></output>
</form>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55466966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档