js事件委託

來源:互聯網
上載者:User

標籤:bubble   log   廠商   class   www.   一個   utf-8   onclick   append   

事件委託又稱事件代理,即利用事件的冒泡機制

那我們在什麼時候用事件委託呢?在需要添加事件的元素很多並且這些元素需要頻繁增刪且不能重新整理的的時候我們就需要事件委託了,例如我們在用JavaScript寫一個todoList時就需要用到事件委託

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>事件委託</title><script>window.onload = function(){    var oUl = document.getElementById(‘oul‘);    var aLi = oUl.getElementsByTagName(‘li‘);    var btn = document.getElementById(‘btn‘);    var Count = 0;        oUl.onclick = function(ev){        var ev = ev || window.event;        var target = ev.target || ev.srcElement;                if(target.nodeName.toLowerCase() == ‘li‘){            console.log(target)        }        };        btn.onclick = function(){            Count++;        var oLi = document.createElement(‘li‘);        oLi.innerHTML = 111 * Count;        oUl.appendChild(oLi);        };};</script></head><body><button id="btn">添加</button>    <ul id="oul">    <li>aaa</li>    <li>bbb</li>    <li>ccc</li>    <li>ddd</li></ul></body></html>

這就是事件委託的簡單案例,通過將事件拋給上層的ul而通過檢查事件的目標對象(target)來判斷並擷取事件來源li;

為父節點添加一個點擊事件,然後當點擊子節點時,click會向上冒泡,而父節點捕獲該事件之後通過target.nodeName來判斷是否為我們需要操作的節點,

事件冒泡及捕獲
瀏覽器的事件冒泡機制,對於事件的捕獲和處理,不同的瀏覽器廠商有不同的處理機制,這裡介紹W3C對DOM2.0定義的標準事件。

DOM2.0模型將事件處理流程分為三個階段:

(1)事件捕獲階段  (2)事件目標階段   (3)事件起泡階段

事件捕獲:當某個元素觸發某個事件(如onclick),頂層對象document就會發出一個事件流,隨著DOM樹的節點向目標元素節點流去,直到到達事件真正發生的目標元素。在這個過程中,事件相應的監聽函數是不會被觸發的。

事件目標:當到達目標元素之後,執行目標元素該事件相應的處理函數。如果沒有綁定監聽函數,那就不執行。

事件起泡:從目標元素開始,往頂層元素傳播。途中如果有節點綁定了相應的事件處理函數,這些函數都會被一次觸發。如果想阻止事件起泡,可以使用e.stopPropagation()(Firefox)或者e.cancelBubble=true(IE)來阻止事件的冒泡傳播。

js事件委託

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.