原文连接html
做者:小小小无路 发布于:2016-2-28 17:09 Sunday前端
以前面试别人的时候总喜欢问事件相关的问题。。。不过不多问如何取消事件冒泡。。由于你们都知道event.stopPropagation()就能够了。。。web
我也一直觉得这货只能取消事件冒泡。。我还一直觉得事件捕获不能取消。。额后来看了<webkit技术内幕>幡然醒悟。。。唉以前看书不仔细啊。。面试
一个事件会从document一直捕获传递到目标节点。。中间若是触发监听捕获的事件而且调用event.stopPropagation();则此事件不会再继续向目标节点传递。chrome
这个事件到达目标节点以后,默认是不冒泡的。。只有event.bubbles为true的时候才会触发冒泡。浏览器
下面这个表格是我让实习生整理的哪些事件冒泡的list。。。仅做为参考。。。app
事件 | 什么时候触发 | 可否 捕捉 |
可否冒泡 event.bubbles |
冒泡到哪里 event.eventPhase |
备注 | |
UI事件 new4 |
load | 页面内容完成时在window上触发此事件 当图像加载完毕时在<img>元素上触发 当嵌入的内容加载完毕时在<object>元素上面触发 |
能 | 否 | 没法冒泡,捕捉和冒泡都是在window上触发, event.eventPhase = 2 |
|
unload | 当前页面彻底卸载后在window上面触发 当嵌入的内容卸载完毕后在<object>元素上触发 |
能 | 否 | |||
error | 当发生JavaScript错误时在window上面触发 当没法加载图像时在<img>元素上面触发 |
能 | firefox:window能 img否/ 否chrome |
window->window | ||
resize | 当浏览器窗口被调整到一个新的高度或宽度时 在window对象上触发 |
能 | 能firefox/ 否chrome |
window->window | ||
scroll | 浏览器的滚动条位置发生变化时触发此事件 | 能 | 能 | document—>window | scrollTop属性 | |
焦点事件/表单事件 new 16 new 4 |
focus | 当元素得到焦点时触发 | 能 | 否 | ||
blur | 当元素失去焦点时触发 | 能 | 否 | |||
focusin | 当元素得到焦点时触发 | 能 | 能 | window | chrome IE能够 Firefox不能够 | |
focusout | 当元素失去焦点时触发 | 能 | 能 | window | chrome IE能够 Firefox不能够 | |
select | 当选中文本框中文本时触发 | 能 | 能 | window | ||
change | 当前元素失去焦点而且元素的内容发生改变时触发 | 能 | 能 | window | 失去焦点后触发 | |
reset | 当表单中的reset的属性被激发时触发 | 能 | 能 | window | form.reset() | |
submit | 一个表单被提交时触发 | 能 | 能 | window | 绑定表单,绑定按钮无效 | |
鼠标事件 new 17 new 10 |
click | 单击主鼠标按钮时触发 | 能 | 能 | window | |
dblclick | 双击主鼠标按钮时出触发 | 能 | 能 | window | ||
mousedown | 在用户按下了任意鼠标按钮时触发 | 能 | 能 | window | ||
mouseup | 在用户释放鼠标按钮时触发 | 能 | 能 | window | ||
mouseenter | 在鼠标光标从元素外部首次移动到元素范围以内时触发 | 能 | 否 | chrome:光标移动到后代元素不会触发 firefox:除了不冒泡和mouseover同样 |
||
mouseleave | 在位于元素上方的鼠标光标移动到元素范围以外时触发 | 能 | 否 | chrome:光标移动到后代元素不会触发 firefox:除了不冒泡和mouseover同样 |
||
mousemove | 当鼠标指针在元素内部移动时重复触发 | 能 | 能 | window | ||
mouseout | 在鼠标指针位于一个元素的上方,而后用户将其移入 另外一个元素时触发 |
能 | 能 | window | 又移入的另外一个元素可能位于前一个元素的外部, 也多是这个元素的子元素。 |
|
mouseover | 在鼠标指针位于一个元素的外部,而后用户将其首次 移入另外一个元素边界以内时触发 |
能 | 能 | window | 又移入的另外一个元素可能位于前一个元素的外部, 也多是这个元素的子元素。 |
|
mousewheel | 用户经过鼠标滚轮滚动页面时触发chrome | 能 | 能 | body—>window | chrome:wheelDelta属性 向上滚+120 向下滚-120 经过wheelDelta正负判读鼠标滚轮滚动方向 |
|
DOMMouseScroll | 用户经过鼠标滚轮滚动页面时触发firefox | 能 | 能 | body—>window | firefox:detail属性 向上滚+3 向下滚-3 | |
键盘事件 new 5 new 7 |
keydown | 当用户按下键盘的任意键时触发,若是按住不放的话,会重复触发此事件 | 能 | 能 | window | 显示键盘上任意按键的keyCode值 |
keypress | 当用户按下键盘的字符键时触发,并且若是按住不放的话,会重复触发此事件 | 能 | 能 | window | 显示键盘上字符键的ASCII值,包括回车键 是否按下shift ctrl键 new7 |
|
keyup | 当用户释放键盘上的键时触发 | 能 | 能 | window | 显示键盘上任意按键的keyCode值 | |
拖拽事件 new 6 |
drag | 当某个对象被拖动时触发此事件 | 能 | 能 | window | 绑定被拖拽元素 |
dragstart | 当某对象开始被拖动时触发此事件 | 能 | 能 | window | 绑定被拖拽元素 | |
dragenter | 当被鼠标拖动的对象进入其容器范围内时触发此事件 | 能 | 能 | window | 绑定容器元素 | |
dragleave | 当被鼠标拖动的对象离开其容器范围内时,或在容器范 围内释放鼠标按钮时触发此事件 |
能 | 能 | window | 绑定容器元素 | |
dragend | 当鼠标拖动结束时触发此事件,即鼠标的按钮被释放 | 能 | 能 | window | 绑定被拖拽元素 | |
dragover | 当被拖动的对象在另外一对象容器范围内拖动时触发此事件 | 能 | 能 | window | 绑定容器元素 | |
文本事件 new 6 |
copy | 当页面当前的被选择内容被复制后触发此事件 | 能 | 能 | window | |
cut | 当页面当前的被选择内容被剪切时触发此事件 | 能 | 能 | window | ||
paste | 当内容被粘贴时触发此事件 | 能 | 能 | window | ||
触摸事件 new 11 |
touchstart | 当手指触摸屏幕时触发 | 能 | 能 | window | 单击触发一次touchstart和一次touchend |
touchmove | 当手指在屏幕上滑动时连续地触发,在这个事件发生期间,调用preventDefault()能够阻止滚动 | 能 | 能 | window | ||
touchend | 当手指从屏幕上移开时触发 | 能 | 能 | window | ||
touchcancel | 当系统中止跟踪触摸时触发 | 能 | 能 | window | ||
HTML5事件 new 4 |
contextmenu (new 6) |
当浏览者按下鼠标右键出现菜单时触发 | 能 | 能 | window | event.preventDefault()阻止显示浏览器默认的上下文 菜单 |
beforeunload | 在页面卸载前触发,能够经过它来取消卸载并继续使用 原有界面 |
能 | 否 | 必须将event.returnValue的值设置为要显示给用户的 字符串(对IE和Firefox而言),同时做为函数的值返 回(对Safari和Chrome而言) |
||
DOMContentloaded | 在造成完整的DOM树以后就会触发 | 能 | 能 | document—>window | 在图像、JavaScript文件、CSS文件或其余资源下载前触发 | |
变更事件 new 15 |
DOMSubtreeModified | 在DOM结构中发生任何变化时触发,这个事件在其余任何 事件触发后都会触发 |
能 | 能 | body—>window | |
DOMNodeInserted | 在一个节点做为子节点被插入到另外一个节点时触发 appendChild()、replaceChild()或insertBefore()向DOM 中插入节点时首先触发 |
能 | 能 | window | ||
DOMNodeRemoved | 在节点从其父节点中被移除时触发 removeChild()或replaceChild()从DOM中删除节点时首先触发 |
能 | 能 | window |