您好,登錄后才能下訂單哦!
小編給大家分享一下JavaScript之事件委托的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
事件委托的原理依賴于事件冒泡,可以通過給父元素的事件委托來確定是哪個子元素觸發了事件從而做一系列操作。
使用事件委托的優點
1、操作子元素時不用一一遍歷,可以根據事件觸發的對象而進行相應操作
dom結構如下:
<ul id = "oUl"> <li class = "item"></li> <li class = "item"></li> <li class = "item"></li> <li class = "item"></li> <li class = "item"></li> </ul>
當li被點擊時,打印該li的值。
在我們還沒有學事件委托的時候我們會遍歷所有li并給它們添加一個click事件,比如這樣:
var aLi = document.getElementsByTagName('li'); for(var i = 0; i < aLi.length; i++) // 遍歷li aLi[i].addEventListener('click', function() { //給每個li添加事件 console.log(this.innerHTML); });
學了事件委托之后js原生代碼如下:
var oUl = document.getElementById('oUl'); oUl.addEventListener('click', function(ev) { ev = ev||window.event; var tag = ev.target; // 觸發事件的對象保存在事件的target里面 console.log(tag.innerHTML); })
jQuery代碼如下:
$('#oUl').on('click', '.item', function() { console.log($(this).html()); // this指向oUl中觸發了click事件并且class為item的子元素 })
相比之下,事件委托只需要獲取父元素并且不需要遍歷li,效率提高了不少。
2、將事件委托給父元素后,動態創建(刪除)的子元素不用重新綁定(解綁)事件,實現了元素與事件的同步更新
在以往的js事件監聽中,用js動態創建的子元素是沒有事件的,必須重新為它們綁定事件,但是用事件委托就不用這么麻煩了,不需要重新綁定事件依舊可以實現事件監聽。
當然事件綁定也是有弊端的,因為它依賴于事件冒泡,如果不支持冒泡那么就不能實現事件綁定了,不過我認為這種幾率還是不高的。還有就是會發生事件誤判,比如頁面中的button1和button2的作用是點擊時彈出值,而button3的作用是點擊是頁面變色,這三個button的同一個事件實現功能不同,當你將click事件委托給它們共同的父元素那么就會出現事件誤判。
所以我認為事件委托是發生在一個子集合的事件功能相同的情況下,如果不相同則不要使用事件委托,以免弄巧成拙。
在實際開發中,掌握事件綁定對于代碼的規范性以及效率會有一定提高,總的來說利大于弊。
以上是“JavaScript之事件委托的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。