我得到的事件按钮点击和背景点击。在背景点击我得到的currentTarget和目标都相同,但如果按钮,我得到不同的。如果它们是相等的或不相等的,我如何比较,以便在相等的情况下,我可以执行一些操作?
发布于 2019-04-02 05:08:35
event.currentTarget指的是侦听器绑定到的element。
在这个演示中,我们可以看到如果我们真的点击了div (可能是因为巨大的填充),那么匹配评估器e.target === e.currentTarget实际上是正确的。
document.querySelector('#test').addEventListener('click', (e) => {
if(e.target === e.currentTarget) console.log('yes');
});div#test {
padding: 20px;
background-color: red;
}
div#test p {
background-color: blue;
}<div id="test">
Try clicking here and then the P
<p id="test2">Test</p>
</div>
发布于 2019-04-02 08:42:18
事件对象有一些属性,其中3项是最重要的:
Event.target -引用“事件的起源”。在外行人的术语:点击按钮,文本框,用户已经输入文本,单选按钮用户已经选择,等等。
Event.currentTarget -引用已注册的事件侦听器/处理程序。如果currentTarget碰巧是其他标记的祖先--那么currentTarget也可以监听所有这些标记的事件。这是可能的,因为事件传播/冒泡,有关详细信息,请参阅事件委托。
Event.type --基本上是点击、输入、更改、提交、重置、DOMContentLoaded等等。
事件委托的关键是找出
Event.target(更改)是而不是Event.currentTarget(除非未注册到事件),否则不会更改。
演示中注释的详细信息
// 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';
}
}form {
border: 3px dashed red;
padding: 30px;
}<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>
https://stackoverflow.com/questions/55466966
复制相似问题