事件委托,Event.target与Event.currentTarget

mal*_*kan 5 javascript dom-events

MDN Event.target参考中,有一个关于实现事件委派的示例:

事件委托示例

// Assuming there is a 'list' variable containing an instance of an  
// HTML ul element.
function hide(e) {
    // Unless list items are separated by a margin, e.target should be  
    // different than e.currentTarget
    e.target.style.visibility = 'hidden';
}

list.addEventListener('click', hide, false);

// If some element (<li> element or a link within an <li> element for  
// instance) is clicked, it will disappear.
// It only requires a single listener to do that
Run Code Online (Sandbox Code Playgroud)

部分示例不清楚

我在示例中不理解的是这条评论:

// Unless list items are separated by a margin, e.target should be  
// different than e.currentTarget
Run Code Online (Sandbox Code Playgroud)

<li>元素上的保证金如何区分Event.targetEvent.currentTarget

小智 6

请记住与MDN Event.currentTarget参考中所述的event.target不同之: event.currentTarget

我认为重点是,如果没有边距,那么直接点击它就不可能,ul因为li元素将完全填满它的空间.

如果保证金,那么它至少会是可能的点击ul,在这种情况下,event.targetevent.currentTarget将是相同的.

function hide(e) {
    document.querySelector("pre").textContent += 'e.target = ' + e.target.nodeName + ", e.currentTarget = " + e.currentTarget.nodeName + "\n";
}

document.querySelector("#list").addEventListener('click', hide, false);
Run Code Online (Sandbox Code Playgroud)
ul {
  border: 2px solid orange;
}
li {
  padding: 10px;
  color: blue;
  margin: 30px;
  border: 1px dashed blue;
}
Run Code Online (Sandbox Code Playgroud)
<pre></pre>
<ul id="list">
  <li>click me
  <li>click me
  <li>click me
</ul>
Run Code Online (Sandbox Code Playgroud)