2016-07-21 21 views
0

e.preventDefault();防止冒泡,但我們如何防止捕獲階段進一步下降到兒童。e.preventDefault();但我們如何防止捕獲階段進一步下降到兒童

基本上,我有父母和孩子的所有元素都有點擊事件,但是我想在用戶點擊孩子時只觸發父母而不是孩子。

在當用戶點擊任何a標籤不應該將用戶重定向到HREF頁面,而不是應該火點擊parentdiv元素的事件

<div id='parentdiv'> 
    <a href="a.html"></a> 
    <a href="b.html"></a> 
    <a href="c.html"></a> 
</div> 
+1

如果你不想讓他們被點擊,你爲什麼要對孩子點擊事件? – DerekMT12

+0

附加的舊點擊事件現在需要與它一起生活。 –

回答

2

據我瞭解下面的例子中,e.preventDefault()阻止默認行爲(點擊提交按鈕時提交,點擊鏈接後點擊url)。 e.stopPropagation()阻止事件冒泡給其他聽衆,所以也許這就是你想要的。

[MDN]

+0

'e.stopPropagation()'不僅僅是停止冒泡,它也停止捕獲(如果與addEventListener的第二個參數一起用作'true') – devnull69

+0

這隻會阻止父元素的點擊處理程序在單擊子元素時觸發,而不會其他方式。 – DerekMT12

+0

@ DerekMT12:的確如此。但是,如果您使用的是捕獲偵聽器,則會首先調用該捕獲偵聽器,因此,如果在該第一個捕獲偵聽器中使用了「e.stopPropagation()」,它將會終止該事件的其餘偵聽器。 – Whothehellisthat

0

如果只想父接收觸摸事件,你可以在CSS爲孩子的元素添加

pointer-events: none