[英]"e.target" calling wrong target?
我正在處理的組件依賴於<span>
元素內的<img>
元素,並且當<span>
通過 JQuery 檢測到“單擊”事件時,應將該跨度的 ID 記錄到控制台。 但由於某種原因,正在記錄<img>
的 ID。
$(() => { $('.star-span').click(e => { console.log(e.target); }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <span class="star-span" id="1"> <img class="star-img" width="15%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Five-pointed_star.svg/2000px-Five-pointed_star.svg.png" /> </span>
有人在我的代碼中看到任何明顯的錯誤嗎?
行為符合預期。 根據MDN , event.target
為
對調度事件的對象的引用。 在事件的冒泡或捕獲階段調用事件處理程序時,它與
event.currentTarget
不同。
被單擊的最里面的元素是img
,因此img
是事件的target
。
如果要引用處理程序所在的元素,請改用e.currentTarget
:
$('.star-span').click(e => { console.log(e.currentTarget); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <span class="star-span" id="1"> <img class="star-img" width="15%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Five-pointed_star.svg/2000px-Five-pointed_star.svg.png" /> </span>
您要查找的是e.currentTarget
而不是e.target
。 檢查代碼段。 e.currentTarget
是分配給偵聽器的對象。 e.target
是實際調度事件的對象(無論鼠標下方是什么)
$(() => { $('.star-span').click(e => { console.log(e.currentTarget); }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <span class="star-span" id="1"> <img class="star-img" width="15%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Five-pointed_star.svg/2000px-Five-pointed_star.svg.png" /> </span>
正如其他人回答的那樣,使用e.currentTarget
可以正常工作。 還有一種使用function
代替arrow
方法,使用this
對象也將帶來好處。 您也可以在此處使用e.currentTarget
。
$(() => { $('.star-span').click(function(e){ console.log(this); console.log(e.currentTarget); }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <span class="star-span" id="1"> <img class="star-img" width="15%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Five-pointed_star.svg/2000px-Five-pointed_star.svg.png" /> </span>
$('.star-span').click(e => { console.log(e.currentTarget.id); })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body> <span class="star-span" id="1"> <img class="star-img" width="5%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Five-pointed_star.svg/2000px-Five-pointed_star.svg.png" /> </span> </body>
我會委托並使用最接近的
$(() => { $('#container').on('click','.star-span',e => { const tgt = e.target.closest('.star-span'); if (tgt) console.log(tgt.id) }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="container"> <span class="star-span" id="star1"><img class="star-img" width="15%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Five-pointed_star.svg/2000px-Five-pointed_star.svg.png" /></span> <span class="star-span" id="star2"><img class="star-img" width="15%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Five-pointed_star.svg/2000px-Five-pointed_star.svg.png" /></span> <span class="star-span" id="star3"><img class="star-img" width="15%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Five-pointed_star.svg/2000px-Five-pointed_star.svg.png" /></span> </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.