每一個 event 都有一個event.bubbles
屬性,能夠知道它能否冒泡。(ref:W3定義的Event Interface)javascript
固然 W3 DOM Level 3 Events 的細則裏已經附上這個表格了:html
Event Type | Bubbling phase |
---|---|
abort | ✗ |
beforeinput | ✔ |
blur | ✗ |
click | ✔ |
compositionstart | ✔ |
compositionupdate | ✔ |
compositionend | ✔ |
dblclick | ✔ |
error | ✗ |
focus | ✗ |
focusin | ✔ |
focusout | ✔ |
input | ✔ |
keydown | ✔ |
keyup | ✔ |
load | ✗ |
mousedown | ✔ |
mouseenter | ✗ |
mouseleave | ✗ |
mousemove | ✔ |
mouseout | ✔ |
mouseover | ✔ |
mouseup | ✔ |
resize | ✗ |
scroll | ✔ |
select | ✔ |
unload | ✗ |
wheel | ✔ |
還附上了 Legacy Events(舊瀏覽器支持的非標準遺留事件)的 bubble 屬性。java
Event Type | Bubbling phase |
---|---|
DOMActivate | ✔ |
DOMAttrModified | ✔ |
DOMCharacterDataModified | ✔ |
DOMFocusIn | ✔ |
DOMFocusOut | ✔ |
DOMNodeInserted | ✔ |
DOMNodeInsertedIntoDocument | ✗ |
DOMNodeRemoved | ✔ |
DOMNodeRemovedFromDocument | ✗ |
DOMSubtreeModified | ✔ |
keypress | ✔ |
H5 還定義了一些新事件:瀏覽器
media相關事件,都不冒泡ide
drag相關事件 dragstart
、 drag
、 dragenter
、 dragexit
、 dragleave
、 dragover
、 drop
、 dragend
均冒泡spa
History相關事件:popstate
,hashchange
冒泡(從window開始……因此意義在哪裏),pagetransition
不冒泡代理
還有不少H5新事件,大多在草案階段,就不一一翻開了。code
此外,這裏還有一個關於IE的事件列表,http://www.feiesoft.com/html/events.htmlorm
事件冒泡是咱們實現事件代理(委託)的關鍵,在avalon1.6中,默認讓能冒泡的事件都使用事件代理實現了!htm
var
canBubbleUp = {
click:
true
,
dblclick:
true
,
keydown:
true
,
keypress:
true
,
keyup:
true
,
mousedown:
true
,
mousemove:
true
,
mouseup:
true
,
mouseover:
true
,
mouseout:
true
,
wheel:
true
,
mousewheel:
true
,
input:
true
,
change:
true
,
beforeinput:
true
,
compositionstart:
true
,
compositionupdate:
true
,
compositionend:
true
,
select:
true
,
cut:
true
,
paste:
true
,
focusin:
true
,
focusout:
true
,
DOMFocusIn:
true
,
DOMFocusOut:
true
,
DOMActivate:
true
,
dragend:
true
,
datasetchanged:
true
}
if
(!W3C) {
delete
canBubbleUp.change
delete
canBubbleUp.select
}
//....
|