場景:
(比較少見) 如果有個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個功能相同...