JavaScript事件模型

原文在 http://www.cnblogs.com/1wen/p/5640997.html我增加上我的例子 並且進行了理解JavaScript事件模型

下面的代碼是我寫的,上面的部分知識總結不是我寫的,知識爲了更好的理解這個點,寫了個例子而已,針對於事件冒泡


JavaScript事件模型

  在各種瀏覽器中存在三種事件模型: 原始事件模型 , DOM2事件模型 , IE事件模型。

其中原始的事件模型被所有瀏覽器所支持,而DOM2中所定義的事件模型目前被除了IE以外的所有主流瀏覽器支持.

  原始事件模型:

 在原始事件模型中(也有說DOM0級),事件發生後沒有傳播的概念,沒有事件流。事件發生,處理,結束,就這麼簡單。

監聽函數只是元素的一個屬性值,通過指定元素的屬性值來綁定監聽器。書寫方式有兩種:

    (1)   HTML代碼中指定屬性值:

    (2)   在js代碼中指定屬性值:document.getElementsByTagName(‘input’)[0].onclick = func

    優點:所有瀏覽器都兼容

    缺點:

      1.邏輯與顯示沒有分離

      2.相同事件的監聽函數只能綁定一個,後綁定的會覆蓋掉前面的

      3.無法通過事件的冒泡、委託等機制。

DOM2事件模型

    此模型是W3C制定的標準模型。W3C制定的事件模型中,一次事件的發生包含三個過程:

    (1)事件捕獲階段。事件被從document一直向下傳播到目標元素,

                            在這過程中依次檢查經過的節點是否註冊了該事件的監聽函數,若有則執行。

    (2)事件處理階段。事件到達目標元素,執行目標元素的事件處理函數.

    (3)事件冒泡階段。事件從目標元素上升一直到達document,同樣依次檢查經過的節點是否註冊了該事件的監聽函數,

有則執行。

    所有的事件類型都會經歷 "事件捕獲階段" 但是隻有部分事件會經歷 "事件冒泡階段" 階段,

例如submit事件就不會被冒泡。 

<body>
FirstController.jsp
如果 li和span 都加上 onclick 的話
那麼點擊span 會向上冒泡,li 的點擊事件也會觸發
如果只有span有onclick事件的話,那麼只有 spanclick 會觸發<pre style="background-color: rgb(255, 255, 255); font-family: 宋體; font-size: 9pt;">
實例代碼

<li οnclick="liclick()">

  <span οnclick="spanclick()">事件冒泡測試</span>
</li>
<script type="application/javascript">
  function spanclick(){
    alert(" wo shi span");
  }

  function liclick(){
    alert(" wo shi li");
  }

</script>
</body>



發佈了39 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章