能冒泡的事件
每个 event 都有一个event.bubbles属性,可以知道它可否冒泡。(ref:W3定义的Event Interface)
当然 W3 dom Level 3 Events 的细则里已经附上这个表格了:
| 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 属性。
| Event Type | Bubbling phase |
|---|---|
| DOMActivate | ✔ |
| DOMAttrModified | ✔ |
| DOMCharacterDataModified | ✔ |
| DOMFocusIn | ✔ |
| DOMFocusOut | ✔ |
| DOMNodeInserted | ✔ |
| DOMNodeInsertedIntoDocument | ✗ |
| DOMNodeRemoved | ✔ |
| DOMNodeRemovedFromDocument | ✗ |
| DOMSubtreeModified | ✔ |
| keypress | ✔ |
H5 还定义了一些新事件:
- media相关事件,都不冒泡
- drag相关事件 dragstart 、 drag 、 dragenter 、 dragexit 、 dragleave 、 dragover 、 drop 、 dragend均冒泡
- History相关事件:popstate,hashchange冒泡(从window开始……所以意义在哪里),pagetransition不冒泡
还有很多H5新事件,大多在草案阶段,就不一一翻开了。
此外,这里还有一个关于IE的事件列表,http://www.feiesoft.com/html/events.html
事件冒泡是我们实现事件代理(委托)的关键,在avalon1.6中,默认让能冒泡的事件都使用事件代理实现了!
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
}
//....本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!