美文网首页
HTML+JS事件捕获

HTML+JS事件捕获

作者: Look_a_Look | 来源:发表于2018-11-26 09:48 被阅读13次

事件:
JavaScript 和 HTML的交互是通过事件实现的,事件发生在传播过程中。

  • DOM中事件传播有2种方式:
    • 捕获模式(capturing),捕获模式又称为“滴流模式”(trickling),就是“从上向下”,
    • 冒泡模式(bubbling),“从下向上”(默认的时间传播方式)
      这里的从上而下是以DOM树为依据,父节点在上,子节点在下。
事件捕获 事件冒泡
事件捕获 事件冒泡
  • 使用addEventListener(type, listener, useCapture)来注册事件的时候,第三个参数默认为false,代表事件捕获方式为冒泡

  • 使用.stopPropagation()可以阻断事件的传播,当为事件捕获时,阻断事件向下传播,当为事件冒泡时,阻断事件向上传播

  • .preventDefault()是用来阻止DOM元素默认的事件的,比如a标签的跳转动作,表单button的提交动作,与事件传播关系不大

  • return false;JQ的语法,相当于.stopPropagation()+.preventDefault(),原生语法中无效

如下例:
  1. 使用的是事件捕获模式,在最上层的outerMost使用了stopPropagation,则点击任何一个元素,都只会触发outerMost的事件
  2. 使用的是事件捕获模式,所以当点击innerMost的时候,DOM事件并未传递到innerMost,所以e.preventDefault()不起作用,a标签仍然会导致页面跳转
<div id="outerMost" style="border: 1px solid black; width: 150px; height: 120px; padding: 20px;">
    outerMost
    <div id="middle" style="border: 1px solid black; width: 60px; height: 60px; padding: 20px;">
        Middle
        <a href="" id="innerMost" style="border: 1px solid black; width: 30px; height: 20px; display: block; margin: 20px;">click</a>
    </div>
</div>

<script>
var outerElement = document.getElementById('outerMost');
var middleElement = document.getElementById('middle');
var innerElement = document.getElementById('innerMost');
outerElement.addEventListener('click', function (e) {
    console.log('trigger outermost div');
    e.stopPropagation();
}, true);
middleElement.addEventListener('click', function (e) {
    console.log('trigger middle div');
    e.stopPropagation();
}, true);
innerElement.addEventListener('click', function (e) {
    console.log('trigger innermost button');
     // e.stopPropagation();
    e.preventDefault();
}, true);
</script>
进阶:事件流
事件流
  • 第一阶段:从最顶层window对象传导到目标节点,称为“捕获阶段”(capture phase)。
  • 第二阶段:在目标节点上触发,称为“目标阶段”(target phase)。
  • 第三阶段:从目标节点传导回最顶层window对象,称为“冒泡阶段”(bubbling phase)

相关文章

  • HTML+JS事件捕获

    事件:JavaScript 和 HTML的交互是通过事件实现的,事件发生在传播过程中。 DOM中事件传播有2种方式...

  • DOM-BOM-EVENT(7)

    7.事件深入 #7.1.事件捕获 事件流分为事件冒泡和事件捕获两种,事件冒泡指事件从里往外传播,而事件捕获刚好相反...

  • day29-web前端之jQuery及Ajax

    1事件冒泡和捕获 1.1.事件冒泡:在子标签中产生的事件会传递给父标签 1.2事件捕获 捕获事件-阻止事件从子标签...

  • Javascript DOM事件流向

    事件流向 先捕获然后处理,然后再冒泡出去 addEventListener false冒泡 true捕获 事件捕获...

  • 浏览器事件流机制

    事件捕获/事件冒泡 他们的本质是事件流的两个方向. 事件捕获 window------------------...

  • 事件流:事件冒泡和事件捕获

    ## 事件流:事件冒泡和事件捕获 ### 1. 两者概念 - **事件捕获**指的是从document到触发事件...

  • 事件冒泡、事件捕获、事件委托

    事件冒泡、事件捕获、事件委托

  • JavaScript事件流

    JavaScript事件流主要有冒泡事件和捕获事件DOM事件流同时支持者两种事件捕获现在统一标准是先捕获再冒泡 a...

  • (七)事件处理

    1.事件捕获与事件冒泡 事件捕获 :事件从顶层元素(document)传播到具体发生事件的元素(Netscape)...

  • 事件冒泡和事件捕获

    事件冒泡和事件捕获

网友评论

      本文标题:HTML+JS事件捕获

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