Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,可以在捕获或冒泡阶段将事件设置为preventDefault操作吗?_Javascript_Event Handling_Event Bubbling_Event Capturing - Fatal编程技术网

在JavaScript中,可以在捕获或冒泡阶段将事件设置为preventDefault操作吗?

在JavaScript中,可以在捕获或冒泡阶段将事件设置为preventDefault操作吗?,javascript,event-handling,event-bubbling,event-capturing,Javascript,Event Handling,Event Bubbling,Event Capturing,简短的问题是:您是否可以执行event.preventDefault(),无论您在哪个元素上设置事件处理程序,只要该元素是“捕获”、“在”和“冒泡”阶段的一部分 我想让页面上的所有内容都不可选择,所以一开始我想这样做 document.addEventListener("selectstart", function(ev) { ev.stopPropagation(); }, true); 因此,当它处于捕获阶段的最开始时,它不会向下传播到页面内容元素,那么就不会进行选择 但看起来,即使停

简短的问题是:您是否可以执行
event.preventDefault()
,无论您在哪个元素上设置事件处理程序,只要该元素是“捕获”、“在”和“冒泡”阶段的一部分

我想让页面上的所有内容都不可选择,所以一开始我想这样做

document.addEventListener("selectstart", function(ev) {
  ev.stopPropagation();
}, true);
因此,当它处于捕获阶段的最开始时,它不会向下传播到页面内容元素,那么就不会进行选择

但看起来,即使停止传播,默认操作仍然会执行

然后,我尝试在捕获阶段这样做:

document.addEventListener("selectstart", function(ev) {
  ev.preventDefault();
}, true);
document.addEventListener("selectstart", function(ev) {
  ev.preventDefault();
}, false);
然后将
true
更改为
false
,以使处理程序在冒泡阶段被调用:

document.addEventListener("selectstart", function(ev) {
  ev.preventDefault();
}, true);
document.addEventListener("selectstart", function(ev) {
  ev.preventDefault();
}, false);
而且它也有效

我曾经认为“preventDefault”是每个元素


那么,在捕获阶段、at阶段和冒泡阶段,您可以调用
ev.preventDefault()
,并且它是完全相同的事件对象,并且您可以阻止默认操作,无论您在哪个元素上设置处理程序,只要该元素位于“捕获”、“at”和“冒泡”位置循环?

它要么是字面上相同的事件对象,要么实现的行为就好像它是。我从来没有向自己证明过哪一个是跨浏览器的情况。:-)很确定这是同一个物体。(见下文。)

但是可以,在事件上调用
preventDefault
会告诉浏览器不要执行默认操作,无论您何时执行该操作


让我们证明它是同一个物体:

var-CAPTURE=true;
var冒泡=错误
无功电流=零;
钩子(document.body,“body”);
钩子(document.getElementById(“中间”),“中间”);
hook(document.getElementById(“target”),“target”);
函数挂钩(元素、名称){
元素。addEventListener(“单击”,函数(e){
if(元素===document.body){
console.log(名称+捕获);
电流=e;
}否则{
log(name+“capture,same?”+(e==current));
}
},捕获);
变量阶段=名称==“目标”?“目标”:“冒泡”;
元素。addEventListener(“单击”,函数(e){
日志(名称+“”+phase+“”,相同?”+(当前===e));
},冒泡);
}

点击我

Ok,在“Microsoft Edge 40.15063.0.0”中的所有日志消息报告
true
@ScottMarcus:谢谢!