JS中的事件委托實例淺析
本文實例講述了JS中的事件委托。分享給大家供大家參考,具體如下:
事件委托(也叫事件代理),其實這個問題也簡單,要想弄明白事件委托,我們先要把事件冒泡的機制搞清楚。舉個事件冒泡的例子:
<ul>
<li>點擊</li>
</ul>
<script>
var ul=document.getElementsByTagName('ul')[0];
var li=document.getElementsByTagName('li')[0];
ul.addEventListener('click', function(){
alert('我是ul,我被點擊了');
}, false);
li.addEventListener('click', function(){
alert('我是li,我被點擊了');
}, false);
</script>
在這段代碼中,當(dāng)我們點擊li的時候出發(fā)了li的click事件,但是在這時,ul的click事件也被觸發(fā)了,這就是事件的冒泡。搞明白這個之后,我們就可以來說事件委托了,既然事件能從子元素(li)冒泡的父元素(ul)身上,那么我們就可以給ul自己加一個click事件,把所有l(wèi)i的事件都委托給了我們的父級(ul)身上,可能到這里有些朋友還是不明白這個事件委托到底有什么用,我們在舉一個事件委托的實例來說明一下:
<ul>
<li>點擊1</li>
<li>點擊2</li>
<li>點擊3</li>
<li>點擊4</li>
<li>點擊5</li>
</ul>
<script>
//使用事件委托的代碼
var ul=document.getElementsByTagName('ul')[0];
ul.addEventListener('click', function(e){
alert(e.target.innerHTML);
}, false);
//不使用事件委托,循環(huán)給li添加click事件
var li=document.getElementsByTagName('li')
for(var i=0;i<li.length;i++){
li[i].onclick=function(){
alert(this.innerHTML);
}
}
</script>
我們以上代碼把事件委托給了ul,只給ul增加點擊事件,在瀏覽器中運行點擊對應(yīng)的li會彈出li對應(yīng)的innerHTML,這個function(e){};中的e這個參數(shù)實際上就是當(dāng)前我們點擊li時,系統(tǒng)傳給我們的一些事件信息,e.target實際上指的就是當(dāng)前我們點擊的這個li,在這里我們每次彈出的都是當(dāng)前點擊對象的innerHTML,這就是一個簡單的事件委托的案例。
而事件委托對于我們優(yōu)化代碼意義是非常大的,我們都知道,頻繁的dom操作是非常耗費性能的,現(xiàn)在ul里邊是5個li,我們假如不用事件委托實現(xiàn)上面代碼所作的事情,就需要用for循環(huán),給每個li都寫一個click事件,這樣一來dom操作就比較多了,如果是10個li呢,100個甚至更多呢,單不說dom操作影響的性能,li過多for循環(huán)自身就會占用大量的事件。如果利用事件委托,既避免了for循環(huán)耗費的性能,又省去了繁多的dom操作耗費的性能。
PS:關(guān)于javascript事件說明可參考本站javascript事件與功能說明大全:http://tools.jb51.net/table/javascript_event
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript頁面元素操作技巧總結(jié)》、《JavaScript操作DOM技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
JavaScript列表框listbox全選和反選的實現(xiàn)方法
這篇文章主要介紹了JavaScript列表框listbox全選和反選的實現(xiàn)方法,涉及javascript操作列表框listbox的技巧,非常具有實用價值,需要的朋友可以參考下2015-03-03
JS如何獲取瀏覽器聲音、麥克風(fēng)以及通知權(quán)限
在我們開發(fā)網(wǎng)頁的時候偶爾會有需要用戶錄音的情況,下面這篇文章主要給大家介紹了關(guān)于JS如何獲取瀏覽器聲音、麥克風(fēng)以及通知權(quán)限的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-03-03
JavaScript實現(xiàn)頁面跳轉(zhuǎn)的5種方法總結(jié)
在前臺開發(fā)中會涉及頁面跳轉(zhuǎn)的問題,下面這篇文章主要給大家總結(jié)介紹了關(guān)于JavaScript實現(xiàn)頁面跳轉(zhuǎn)的5種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-12-12
JavaScript動態(tài)提示輸入框輸入字數(shù)的方法
這篇文章主要介紹了JavaScript動態(tài)提示輸入框輸入字數(shù)的方法,實例分析了javascript針對頁面元素的動態(tài)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07
讓mayfish支持mysqli數(shù)據(jù)庫驅(qū)動的實現(xiàn)方法
mysql 是非持繼連接函數(shù)而 mysqli 是永遠連接函數(shù)。也就是說 mysql 每次鏈接都會打開一個連接的進程而 mysqli 多次運行 mysqli 將使用同一連接進程,從而減少了服務(wù)器的開銷。2010-05-05
BootStrap Select清除選中的狀態(tài)恢復(fù)默認狀態(tài)
PC端項目中經(jīng)常會出現(xiàn)大量的數(shù)據(jù)列表頁面,涉及到下拉框選擇篩選條件;當(dāng)時用到bootstrap-select下拉框時該如何點擊重置按鈕就清除下拉框的選中狀態(tài)呢?下面通過本文給大家介紹下,需要的的朋友參考下吧2017-06-06

