阻止事件冒泡現象

首先來解釋一下啥是事件冒泡現象瀏覽器

事件冒泡:函數

多個元素嵌套,有層次關係,這些元素都註冊了相同的事件,若是裏面的元素的出發了事件,外面的元素該事件也觸發this

在這裏有必要強調一下  相同的事件  不必定徹底相同  即   都是 點擊事件  或者 都是 鼠標移入事件spa

來個例子3d

<div class="at1" id = "1">
        <div class="at2" id = "2">
            <div class="at3" id = "3"></div>
        </div>
</div>

先寫出來這三個div的結構code

再給他們寫好樣式對象

 1  .at1 {
 2             width: 300px;
 3             height: 300px;
 4             background-color: red;
 5         }
 6         .at2 {
 7             width: 200px;
 8             height: 200px;
 9             background-color: yellow;
10         }
11         .at3 {
12             width: 100px;
13             height: 100px;
14             background-color: pink;
15         }

即他們應該是如圖所示的結構blog

而後咱們爲這三個註冊點擊事件事件

1 my$("1").onclick = function () {
2         this.style.backgroundColor = "white";
3     }
4     my$("2").onclick = function () {
5         this.style.backgroundColor = "white";
6     }
7     my$("3").onclick = function () {
8         this.style.backgroundColor = "white";
9     }

而後這時候冒泡事件的表現呢  就是這樣it

你點擊黃色的div那麼黃色和紅色 都會背景顏色變白   即:黃色的事件觸發 使得事件冒泡 致使紅色div事件觸發

你點擊粉色的div 那麼全部的div都會背景顏色變白   即:粉色的事件觸發使得事件冒泡 致使黃色div事件觸發 繼而致使紅色div觸發

 

咱們該如何阻止事件冒泡呢?

首先我來講一下事件處理參數對象

這個對象呢  在事件處理的函數中能夠驗證一下它的存在

你測完會發現  谷歌火狐都有這個事件處理參數對象    而 IE8是undefined  因此呢是ie 8 是不支持的

my$("3").onclick = function () {
        this.style.backgroundColor = "white";
    加一行代碼 就能驗證 consolo.log(arguments.lenth);
}
若是你點了div3 那麼控制檯就會有一個 1 打印出來 說明這個事件處理參數對象是真實存在的

第一種瀏覽器 火狐瀏覽器中的阻止事件冒泡 固然這個谷歌也支持
阻止事件冒泡 是利用這個事件處理參數對象來進行的

咱們要利用 因此就把參數傳進來

代碼以下
my$("3").onclick = function (e) {
   this.style.backgroundColor = "white";
  e.stopPropagation(); }
第二種瀏覽器 ie瀏覽器種的阻止事件冒泡 固然這個谷歌也支持

代碼以下
my$("3").onclick = function () {
this.style.backgroundColor = "white";
    window.event.cancelBubble = true; }
因此這個代碼會牽扯到兼容的問題 咱們最後把兩種封裝成一個兼容代碼便可 
相關文章
相關標籤/搜索