【发布时间】:2017-04-28 16:06:50
【问题描述】:
简短的问题是:无论您在哪个元素上设置事件处理程序,只要该元素是“捕获”、“at”和“冒泡”阶段的一部分,您能做到event.preventDefault() 吗?
我想让页面上的所有内容都无法选择,所以一开始我想做
document.addEventListener("selectstart", function(ev) {
ev.stopPropagation();
}, true);
这样当它在捕获阶段的最开始时,它不会向下传播到页面内容元素,那么不会进行任何选择。
但看起来即使它停止传播,默认操作仍会执行。
然后,我尝试在捕获阶段这样做:
document.addEventListener("selectstart", function(ev) {
ev.preventDefault();
}, true);
然后将true 更改为false 以使处理程序在冒泡阶段被调用:
document.addEventListener("selectstart", function(ev) {
ev.preventDefault();
}, false);
它也有效。
我以前认为“preventDefault”是每个元素。
那么,在捕获阶段、at 阶段和冒泡阶段,您是否可以调用ev.preventDefault(),它是完全相同的事件对象,并且无论您设置哪个元素,您都可以阻止默认操作处理程序是否打开,只要元素在“捕获”、“在”和“冒泡”循环中?
【问题讨论】:
标签: javascript event-handling event-bubbling event-capturing