事件代理也叫事件委托,是指將要觸發的事件綁定到目標元素的父元素上,利用冒泡機制來觸發該事件。
一般用在目標元素是動態添加的,無法在初次渲染頁面時掛載事件,只能在其父級元素上去代理一下。
或者是不想單獨為每個相同的元素都去綁定一個事件,統一用一個父級事件去處理完事了。
更高級一點的使用原因是減少內存占用,如果有100個li就要占100個內存空間去存事件對象,性能有影響,直接綁到父級上,一塊處理就完事了。
下面是一個例子:
在ul元素下有很多li,需要給動態添加的li去添加click事件,只能用事件代理的方式,將事件綁定到ul上。
~~~text
parentUl.addEventListener('click', function(e){
var target = event.target || event.srcElement;
if(!!target && target.nodeName.toUpperCase() === "LI"){
console.log(target.innerHTML);
}
}, false);
~~~
在以上代碼中,請注意target.nodeName的使用,這個是判斷事件觸發目標的根本抓手。
- js面試題
- 說一下自己常用的es6的功能?
- 頁面渲染html的過程?
- 說一下事件代理?
- 說一下繼承的幾種方式及優缺點?
- 說一下閉包?
- 對JSONP的理解*
- 基本的數據類型有哪些?
- js程序題
- JS找字符串中出現最多的字符
- 數組去重怎么作?
- 變量提升的這道題你會嗎
- 用一段代碼思考this的指向問題
- 這些類型的typeof返回什么值?
- 怎樣添加、移除、移動、復制、創建和查找節點?
- css面試題
- css水平、垂直居中的寫法,請至少寫出4種
- 1rem、1em、1vh、1px各自代表的含義?
- 說一下盒模型?
- 清除浮動的幾種方式,及原理?
- b與strong的區別?
- img中的alt與title屬性?
- 瀏覽器兼容性
- IE6的BUG你都遇過哪些?怎么解決的?
- html面試題
- 對HTML結構語義化的理解?
- 前端工程化面試題
- webpack
- export和export default的區別?
- VueJs面試題
- 基礎
- 生命周期
- vue路由(vue-router)
- 狀態管理(vuex)
- axios
- vue-cli框架
- 前端架構面試題
- HTTP
- get、post的區別
- 你所知道的http的響應碼及含義?