事件冒泡

75 阅读2分钟

事件三个阶段 image.png

image.png 阻断事件冒泡:e.stopPropagation()

好处: 1.事件冒泡好处: 如果一个父元素中所有的子元素需要注册同名事件,只需要给父元素注册即可

        2.事件对象的一些属性介绍

            this: 谁调函数,函数中的this就代表谁 --- 事件源:指的 当前执行的事件处理函数 所属的 dom对象

            e.currentTarget : 和this一模一样,唯一的区别就是有兼容性。 以后用this是最多的

            e.target : 真正的事件触发源 -- 真正触发这个事件的源头(子元素)  -- IE8 : e.srcElement 

         */

        //需求:给每一个li元素注册鼠标点击事件,弹出当前li元素文本

        //方式一:遍历 每个 li标签,为他们添加 onclick ,打印 自己的内容 ----------

        // let liList = document.querySelectorAll('#ul1>li');

        // for(let i = 0;i<liList.length;i++){

        //     liList[i].onclick = function(){

        //         console.log(this.innerHTML);                

        //     }

        // }

 1.事件冒泡: 如果一个元素的事件被触发 ,所有父级元素同名事件会被依次触发

            事件源->父元素->body->html->document->window

        2.事件捕获: 如果一个元素的事件被触发,会先触发最顶级的元素的同名事件,

        然后一级一级往下触发,直到目标元素

            window->document->html->body->父元素->事件源

        3.事件捕获事件冒泡完全相反的过程

        4.如何注册捕获阶段的事件:唯一方式:  addEventListener注册,第三个参数一定要是 true

          IE没有捕获

          addEventListener(事件名,事件处理函数,是否捕获阶段)

                                                 false -  则事件 为 冒泡阶段 事件

                                                 true - 则事件 为 捕获阶段 事件

        5.阻止冒泡也可以阻止捕获

拓展:e.preventdefault()意思是阻止默认事件执行,比如点击超链接,默认事件就是跳转页面。如果在超链接点击事件中调用该方法,就不会再执行跳转页面

javascript的return false只会阻止默认行为,而是用jQuery的话则既阻止默认行为又防止对象冒泡。