美文网首页
事件的冒泡,捕获,委派,绑定

事件的冒泡,捕获,委派,绑定

作者: 仙姑本姑 | 来源:发表于2019-12-23 00:04 被阅读0次

事件的冒泡(Bubble)

指的是事件的向上传导,当后代元素的事件被触发时,其祖先元素的相同事件也会被触发。
可用事件对象来取消冒泡,将事件对象的cancleBubble设置为true
通过事件的冒泡,可以做出让div跟随鼠标移动的效果

事件的委派

将事件统一绑定给元素共同的祖先元素(后代元素事件触发时,通过冒泡,通过祖先元素的响应函数来处理事件)
这样可以只绑定一次,即可应用到多个元素上
事件的委派利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能

event中的target表示的触发事件的对象
使用它对触发事件的元素进行判断

事件的绑定

btn02.onclick = function() {
                alert("1");
            }
btn02.onclick = function() {
                alert("2");
            }

为元素btn02绑定多个事件时,发现会被覆盖,以上程序只能输出2

通过addEventListener()为元素绑定响应函数(IE8以下不支持)

addEventListener()的三个参数:

  • 第一个参数type:事件的字符串,如onclick, 不要on;
  • 第二个参数listener:回调函数,当事件被触发时会被调用;
  • 第三个参数useCapture:,参数值是布尔值,默认是false。当useCapture为false时,事件处理采取事件冒泡的原则,当userCapture为true时,则采取事件捕获的原则。
            var btn02 = document.getElementById("btn02");
            btn02.addEventListener("click", function() {
                alert("1");
            }, false);
            btn02.addEventListener("click", function() {
                alert("2");
            }, false);

此时绑定多个就不会被覆盖
使用addEventListener()可以为一个元素的相同事件绑定多个回调函数

在IE8以下使用attachEvent()

  • 第一个参数:事件的字符串,要on;
  • 第二个参数:回调函数

其余与addEventListener()相同,不同的是它是后绑定先执行,执行顺序与addEventListener()相反。

所以为了兼容所有浏览器:

 var btn02 = document.getElementById("btn02");

            function bingding(obj, eventStr, callback) {
                if (obj.addEventListener) {
                    obj.addEventListener(eventStr, callback, false);
                } else {
                   //IE8以下attachEvent绑定的this是window,而addeEventListener()是obj
                    obj.attachEvent("on" + eventStr, function(){
                      callback.call(obj);
                    });
                }
            }
            bingding(btn02, "click", function() {
                alert("1")
            });
        }

注意,在修改attachEvent()的callback的this时,如果不加function,直接写callback.call,那么第三个参数依然被浏览器调用,而加function之后,可以由我们自己调用。

事件的捕获

事件的冒泡:认为事件应该是由内向外传播,也就是当事件触发时,应该先触发当前元素上的事件,然后再向当前元素的祖先元素上传播。
事件的捕获:认为事件应该是由外向内传播的,也就是当前事件触发时,应该先触发当前元素的最外层的祖先元素的事件,然后在向内传播给后代元素。

事件传播可以分成三个阶段
1.捕获阶段

  • 在捕获阶段时从最外层的祖先元素,向目标元素进行事件的捕获,但是默认此时不会触发事件
    2.目标阶段
  • 事件捕获到目标元素,捕获结束开始在目标元素上触发事件
    3.冒泡阶段
  • 事件从目标元素向他的祖先元素传递,依次触发祖先元素上的事件

如果希望在捕获阶段就触发事件,可以将addEventListener()的第三个参数设置为true
一般情况下我们不会希望在捕获阶段触发事件,所以这个参数一般都是false
IE8及以下的浏览器中没有捕获阶段

相关文章

  • 事件的冒泡,捕获,委派,绑定

    事件的冒泡(Bubble) 指的是事件的向上传导,当后代元素的事件被触发时,其祖先元素的相同事件也会被触发。可用事...

  • 事件

    事件顺序 先执行捕获事件,然后目标阶段,再执行冒泡事件 给一个dom即绑定了捕获,又绑定了冒泡,那么先绑定什么事件...

  • 事件委托

    1.什么是事件委派?如何实现事件委派? 答:事件委派是利用冒泡原理,给父元素绑定事件,让其子元素执行。 实例:u1...

  • 原始类型与事情委托

    1.绑定事件: 二、事件冒泡与事件捕获 事件委托 案例见事件委托 计时器

  • 事件生僻知识学习笔记

    DOM2 级事件包括: 事件捕获,处于目标,事件冒泡 绑定事件方法: HTML上直接绑定 DOM0级事件处理程序 ...

  • teambition 面试题解析

    一、事件捕获和冒泡的理解。 1、事件绑定的三种形式 1⃣️标签行间内绑定 特点:当同一事件...

  • js运用

    1.属性操作 2.BOM操作 3.计时事件 4.事件绑定 事件冒泡和事件捕获

  • 事件绑定 和 方法传值

    冒泡和非冒泡事件绑定 bindtap: 冒泡事件绑定 catchtap: 非冒泡事件绑定当其他的事件冒泡到当前元素...

  • js事件委托

    DOM事件流:捕获=====》到达目标====》冒泡 将绑定在内部元素的事件,改为绑定到外层容器,当点击内部元素时...

  • 事件绑定、事件冒泡与捕获

    一、事件绑定事件绑定又称事件委托,事件代理,可以给同一个div绑定多个事件 非IE: IE: 绑定事件兼容写法:(...

网友评论

      本文标题:事件的冒泡,捕获,委派,绑定

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