代碼圖片
我正在通過 w3school 學習 JQuery。我遇到了這個例子。據我了解,$("*").dblclick()將雙擊事件系結到檔案中的每個元素(每個元素都有自己的事件并且它們是分開的)。
而且,我希望在雙擊一個<p>元素后,只有單擊的那個會消失。但是,當我單擊一個<p>元素時,每個<p>元素都會消失。我可以知道我的理解有什么問題嗎?
uj5u.com熱心網友回復:
??
這是因為*in$("*").dblclick()是W3Schools中解釋的選擇器。
這*意味著“所有元素”,參考 HTML 的 DOM 結構,<body>也是一個元素,而 JQuery 確實也在它上面附加了事件,所以當你說“當我點擊一個<p>元素時”,你應該是什么意思是_“當我單擊<body>元素時”。
這是因為<body>元素的層次結構高于p元素,并且事件在該元素上被觸發,因為它優先于p包含的元素body。
所以,你的代碼作業得很好。但是,例如,如果您想要“雙擊<p>元素后,只有單擊的元素會消失”,那么您的代碼可能應該如下所示:
$("p").dblclick()
這意味著,找到所有p元素并系結此事件并將符合您的期望。
希望您在嘗試時告訴我發生了什么!快樂編碼!
uj5u.com熱心網友回復:
"*"選擇所有元素,包括<body>和<html>( https://api.jquery.com/all-selector/ )。因此,如果您雙擊其中一個段落,該事件將被觸發 3 次,一次為<p>,一次為<body>,一次為<html>生成這種“不希望的”行為。如果您的其中一個<p>在里面,比如說 a <div>,那么該事件將被觸發四次。防止這種情況的一種方法是停止事件傳播。
$( function() {
$( "*" ).dblclick( function( event ){
console.log( event.target.innerHTML );
console.log( event.target.parentElement.tagName );
$(this).hide();
event.stopPropagation();
});
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>aaaaaa</p>
<p>bbbbbb</p>
<p>cccccc</p>
<div>
<p>dddddd</p>
</div>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/480801.html
標籤:javascript jQuery
上一篇:如果將它用于陣列$('.randomClass')[i],為什么removeClass/addClass不起作用?
