DOM事件小計
DOM0: element.onclick = function(){}
DOM2: element.addEventListener('click',function(){},false)
html
DOM3: element.addEventListener('keyup',function(){},false)
spa
- 捕獲
- 冒泡
- 捕獲 === > 目標階段 ===> 冒泡
捕獲具體流程(冒泡反之)code
- window ===> document ===> html ===> body ===> ...目標元素
演示捕獲流程:htm
//body中新建一個id爲ev的div,寬高背景本身設置下 var ev = document.getElementById('ev') window.addEventListener('click',function(){ console.log('window captrue'); },true)//true爲捕獲階段觸發,false爲冒泡階段觸發 document.addEventListener('click',function(){ console.log('document captrue'); },true) document.documentElement.addEventListener('click',function(){ console.log('html captrue'); },true) document.body.addEventListener('click',function(){ console.log('body captrue'); },true) ev.addEventListener('click',function(){ console.log('ev captrue'); },true) // 點擊id爲ev的div,查看控制檯打印以下 window captrue document captrue html captrue body captrue ev captrue // 打印順序與註冊順序無關
- event.preventDefault() 阻止默認事件
- event.stopPropagation() 阻止冒泡
- event.stopImmediatePropagation() 事件響應優先級
- event.currentTarget 指向引發觸發事件的元素
- event.target 事件綁定的元素
var eve = new Event('custome'); element.addEventListener('custome',function(){ console.log('custome'); }); element.dispatchEvent(eve); // 注意是事件對象eve而不是事件名custome