国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript之事件委托實(shí)例(附原生js和jQuery代碼)

2024-05-06 15:14:03
字體:
供稿:網(wǎng)友

事件委托的原理依賴于事件冒泡,可以通過給父元素的事件委托來確定是哪個子元素觸發(fā)了事件從而做一系列操作。

使用事件委托的優(yōu)點(diǎn)

1、操作子元素時(shí)不用一一遍歷,可以根據(jù)事件觸發(fā)的對象而進(jìn)行相應(yīng)操作

dom結(jié)構(gòu)如下:

<ul id = "oUl"> <li class = "item"></li> <li class = "item"></li> <li class = "item"></li> <li class = "item"></li>  <li class = "item"></li></ul>

當(dāng)li被點(diǎn)擊時(shí),打印該li的值。

在我們還沒有學(xué)事件委托的時(shí)候我們會遍歷所有l(wèi)i并給它們添加一個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);  });

學(xué)了事件委托之后js原生代碼如下:

var oUl = document.getElementById('oUl');oUl.addEventListener('click', function(ev) { ev = ev||window.event; var tag = ev.target; // 觸發(fā)事件的對象保存在事件的target里面 console.log(tag.innerHTML);})

jQuery代碼如下:

$('#oUl').on('click', '.item', function() {  console.log($(this).html()); // this指向oUl中觸發(fā)了click事件并且class為item的子元素})

相比之下,事件委托只需要獲取父元素并且不需要遍歷li,效率提高了不少。

2、將事件委托給父元素后,動態(tài)創(chuàng)建(刪除)的子元素不用重新綁定(解綁)事件,實(shí)現(xiàn)了元素與事件的同步更新

在以往的js事件監(jiān)聽中,用js動態(tài)創(chuàng)建的子元素是沒有事件的,必須重新為它們綁定事件,但是用事件委托就不用這么麻煩了,不需要重新綁定事件依舊可以實(shí)現(xiàn)事件監(jiān)聽。

當(dāng)然事件綁定也是有弊端的,因?yàn)樗蕾囉谑录芭荩绻恢С置芭菽敲淳筒荒軐?shí)現(xiàn)事件綁定了,不過我認(rèn)為這種幾率還是不高的。還有就是會發(fā)生事件誤判,比如頁面中的button1和button2的作用是點(diǎn)擊時(shí)彈出值,而button3的作用是點(diǎn)擊是頁面變色,這三個button的同一個事件實(shí)現(xiàn)功能不同,當(dāng)你將click事件委托給它們共同的父元素那么就會出現(xiàn)事件誤判。

所以我認(rèn)為事件委托是發(fā)生在一個子集合的事件功能相同的情況下,如果不相同則不要使用事件委托,以免弄巧成拙。

在實(shí)際開發(fā)中,掌握事件綁定對于代碼的規(guī)范性以及效率會有一定提高,總的來說利大于弊。

以上這篇JavaScript之事件委托實(shí)例(附原生js和jQuery代碼)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持錯新站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 南漳县| 灵武市| 嘉荫县| 万荣县| 花莲市| 石城县| 威远县| 临夏市| 清涧县| 蓬安县| 大田县| 卢龙县| 环江| 新龙县| 宁阳县| 吉木乃县| 乌兰察布市| 禹州市| 日照市| 济阳县| 江门市| 犍为县| 临高县| 富宁县| 林芝县| 庆阳市| 多伦县| 廊坊市| 共和县| 兴宁市| 合作市| 佳木斯市| 寿宁县| 汉沽区| 琼海市| 阳原县| 白银市| 科技| 车致| 商城县| 太和县|