乙個場合, 事件捕獲派上了用處

2022-08-15 09:42:20 字數 775 閱讀 1950

場景:

(比較少見) 如果有個js生成的dom元素, 裡面繫結了一些click 事件, 我們想在不hack原先**的情況下, 把dom 裡面的事件攔截.

思路:事件機制有捕獲和冒泡, 現在主流瀏覽器的事件都是冒泡機制, 即從事件發生的dom元素開始層層向上出發, 對於我們要攔截的dom, 顯然沒法在它的更深層次 event.stoppropagation(), 所以目標dom始終會被先觸發. 

換個思路, 捕獲機制則相反, 從頂層的dom元素開始層層深入, 這就給了攔截乙個機會. 找到目標dom 的外層元素, 阻止事件傳遞即可.

**:

1

<

div

class

="outer"

>

2<

div

class

="inner"

>

3hello

4div

>

5div

>

1 $(function

() )

6 document.queryselector(".outer").addeventlistener("click", function

(event) , true

);10 })

addeventlistener 的第三個引數是捕獲模式標誌位.

點選outer內部的任意區域, inner 都不會被觸發, 只會輸出: 

"outer"  ("inner" 將會被攔截, 不列印)

禁止乙個介面有兩種用處

一般過程中,很少會乙個介面有兩種用處 有時為了偷懶或者smart,使用了介面的 可能會導致問題,而一般根據介面的含義很難發現還有其它地方呼叫 專案中傳輸資料有佇列,外部獲取佇列有個介面getdata,出現特殊情況會去flush佇列。當時為了smart,就呼叫了getdata來丟棄前面的資料 專案後期...

使用事件丟擲乙個值

有時候用乙個事件來丟擲乙個特定的值是非常有用的。例如我們可能想讓元件決定它的文字要放大多少。有的時候用乙個事件來丟擲乙個特定的值是非常有用的。例如我們可能想讓元件決定它的文字要放大多少。這時可以使用 emit的第二個引數來提供這個值 enlarge text 然後當在父級元件監聽這個事件的時候,我們...

C 多個控制項繫結乙個事件

有6個功能相同的按鈕,不想乙個乙個新增事件。在designer裡面繫結好,然後通過控制項名字傳入不同的引數。1 private void servooff click object sender,eventargs e 2 根據按鈕的名字並判斷是第幾個按鈕,向目標函式中傳入按鈕索引號。有6個功能相同...