美文网首页让前端飞
DOM Event:终止事件流动

DOM Event:终止事件流动

作者: butterandfly | 来源:发表于2016-11-07 18:56 被阅读0次

阅读本文需要理解事件流动机制,可以查阅之前的DOM Event:事件流动(Event Flow)

我们知道一个事件被浏览器捕获后会元素间流动,像这样:

document    1    7
            v    ^
body        2    6
            v    ^
div         3    5
            v    ^
button         4

事件会依次在这些元素间触发。
但我们有没有可能在中间阻止事件的继续传递呢?答案是有的,Event接口提供了两个阻止事件流动相关的API:

  • stopPropagation,终止事件在元素间的传递,但同一元素上的监听能继续触发
  • stopImmediatePropagation,终止事件

stopPropagation

该方法停止事件在元素间传递,但同一元素上的监听能继续触发。例如:

// button上监听并调用stopPropagation
buttonElement.addEventListener('click', (event) => {
  console.log('1');
  event.stopPropagation();
});

// button上继续监听,不会被上面的stopPropagation影响
buttonElement.addEventListener('click', (event) => {
  console.log('2');
});

// div上监听,事件已不能传到这里
divElement.addEventListener('click', (event) => {
  console.log('3');
});

上面这段代码的输出是:

1
2

stopImmediatePropagation

该方法会直接终止事件。事件不但不能在元素间传递,就算在同一元素上的后续监听都会被取消:

// button上监听并调用stopImmediatePropagation
buttonElement.addEventListener('click', (event) => {
  console.log('1');
  event.stopImmediatePropagation();
});

// button上继续监听,因stopImmediatePropagation的调用不会被执行
buttonElement.addEventListener('click', (event) => {
  console.log('2');
});

// div上监听,事件已不能传到这里
divElement.addEventListener('click', (event) => {
  console.log('3');
});

上面这段代码的输出是:

1

注意,上述两个事件只是停止了事件流动,而没有“阻止浏览器默认行为”(prevent default browser events);若你想阻止元素的默认行为,你依然需要额外调用preventDefault

相关文章

  • DOM Event:终止事件流动

    阅读本文需要理解事件流动机制,可以查阅之前的DOM Event:事件流动(Event Flow)。 我们知道一个事...

  • DOM Event:事件流动(Event Flow)

    该文章会讲述DOM规范里的事件流动的机制。你需要对浏览器事件相关的知识有最基本的了解。 考虑这么个例子: 哪怕一个...

  • 什么是DOM的事件委托

    DOM的事件委托(Event delegation)是通过事件 ”冒泡“ (event propagation) ...

  • DOM事件(二)

    一、 事件对象 1.1 DOM中的事件对象 在触发DOM上的某个事件时,会产生一个事件对象event: event...

  • Dom事件

    基本概念 Dom事件级别 Dom事件模型 Dom事件流 描述Dom事件捕获的具体流程 Event对象的常见应用 自...

  • 自定义事件深入

    1.原生dom绑定系统事件 2.非原生dom绑定自定义事件 Event组件:Event非原生DOM节点,而绑定的c...

  • DOM事件类

    基本概念:DOM事件的级别 DOM事件模型 DOM事件流 描述DOM事件捕获的具体流 Event对象的常见应用 自...

  • DOM事件

    DOM事件的级别 DOM事件模型 DOM事件流 描述DOM时间捕获的具体流程 Event对象的常见应用 自定义事件...

  • 深入理解DOM事件机制

    前言 本文主要介绍: DOM事件级别 DOM事件流 DOM事件模型 事件代理 Event对象常见的方法和属性 一、...

  • DOM事件

    基本概念 DOM事件类型 DOM事件流 DOM事件捕获的具体流程 Event对象的常见应用 自定义事件

网友评论

    本文标题:DOM Event:终止事件流动

    本文链接:https://www.haomeiwen.com/subject/gobouttx.html