• JavaScript事件冒泡简介及应用


    一、什么是事件冒泡

    在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事 件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对 象层次的最顶层,即document对象(有些浏览器是window)。

    打个比方说:你在地方法院要上诉一件案子,如果地方没有处理此类案件的法院,地方相关部门会帮你继续往上级法院上诉,比如从市级到省级,直至到中央法院,最终使你的案件得以处理。

    二、事件冒泡有什么作用

    (1)事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件

    【集中处理例子】

    复制代码
    <div onclick="eventHandle(event)" id="outSide" style="100px; height:100px; background:#000; padding:50px">
    <div id="inSide" style="100px; height:100px; background:#CCC"></div>
    </div>
    <script type="text/javascript">
    //本例子只在外面盒子定义了处理方法,而这个方法一样可以捕获到子元素点击行为并处理它。假设有成千上万子元素要处理,难道我们要为每个元素加“onclick="eventHandle(event)"”?显然没有这种集中处理的方法来的简单,同时它的性能也是更高的。
    function eventHandle(e)
    {
        
    var e=e||window.event;
        
    var obj=e.target||e.srcElement;
        alert(obj.id
    +' was click')
    }
    </script>
    复制代码

    下面是本人在网上抄的一个方法,把这个方法放在精准目标对象处理程序结尾,本事件触发处理结束后,事件将不在进行冒泡处理。

    【阻止事件冒泡例子】

    <div onclick="showMsg(this,event)" id="outSide" style="100px; height:100px; background:#000; padding:50px">
    <div onclick="showMsg(this,event)" id="inSide" style="100px; height:100px; background:#CCC"></div>
    </div>
    <script type="text/javascript">
    //阻止事件冒泡后,你点击灰色盒子,整个过程只弹一次对话框了(注意与默认情况对比)
    function showMsg(obj,e)
    {
        alert(obj.id);
        stopBubble(e)
    }

    //阻止事件冒泡函数
    function stopBubble(e){
    var e = e || event;
    e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true; //stopPropagation在标准浏览器下,cancelBubble在IE下
    }
    </script>

  • 相关阅读:
    Vue 子组件接收父组件的值
    Vue 子组件调用父组件的方法
    dedecms大量删除文章后,列表页显示错误修复办法
    怎么才能快速的删除指定栏目、指定日期、指定id之间的织梦文章内容?
    怎么才能快速的彻底删除织梦文章内容?
    织梦删除专题,删除文章时出现错误inc_batchup.php on line 17 如何解决?
    windows环境下更改Mysql数据库存储位置的具体步骤
    JsonP原理
    建一个别人打不开的文件夹
    Dos环境变量修改
  • 原文地址:https://www.cnblogs.com/sensualgirl/p/2699821.html
Copyright © 2020-2023  润新知