簡體   English   中英

為什么我的活動沒有冒泡

[英]Why isn't my event bubbling

這是一些演示代碼:

<div id="test">
    <div class="child">
        click
    </div>
</div>
<script>
   document.addEventListener('click', function (e) {
       if(e.target.classList.contains('child')){
           console.log('child')
       }
       if(e.target.id==='test'){
           console.log('test')
       }
       if(e.target.tagName === 'HTML'){
           console.log('html')
       }
   }, false)
</script>

當我單擊文本時,控制台僅記錄'child'。 為什么click事件沒有冒泡到parentNode #test? 即使是html元素也無法獲得click事件。

任何人都可以解釋問題是什么?

事件正在冒泡,這就是注冊到文檔對象的句柄被觸發的原因。 文檔對象是dom中最頂層的對象,即它是html元素的父對象。 如果沒有發生冒泡,那么處理程序就不會被調用。

但是在所有處理程序中, Event.target將引用事件開始的原始元素,這就是為什么它總是引用子元素

對調度事件的對象的引用。 在事件的冒泡或捕獲階段調用事件處理程序時,它與event.currentTarget不同。

如果要測試祖先元素,則需要從事件目標遍歷並查看是否滿足條件

 document.addEventListener('click', function(e) { var target = e.target; while (target) { if (target.classList.contains('child')) { snippet.log('child') } if (target.id === 'test') { snippet.log('test') } if (target.tagName === 'HTML') { snippet.log('html') } target = target.parentNode; } }, false) 
 <!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script> <div id="test"> <div class="child"> click </div> </div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM