JS的事件冒泡和事件捕获
admin
2023-07-31 19:43:57
0

先上结论:他们是描述事件触发时序问题的术语。事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。相反的,事件冒泡是自下而上的去触发事件。绑定事件方法的第三个参数,就是控制事件触发顺序是否为事件捕获。true,事件捕获;false,事件冒泡。默认false,即事件冒泡。Jquery的e.stopPropagation会阻止冒泡,意思就是到我为止,我的爹和祖宗的事件就不要触发了。

这是HTML结构

123<div id="parent">  <div id="child" class="child">div>div>

现在我们给它们绑定上事件

            document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+this.id);
            })
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+this.id)
            })

结果:

child事件被触发,child
parent事件被触发,parent

结论:先child,然后parent。事件的触发顺序自内向外,这就是事件冒泡。

现在改变第三个参数的值为true

       document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+e.target.id);
            },true)
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+e.target.id)
            },true)

结果:

parent事件被触发,parent
child事件被触发,child

结论:先parent,然后child。事件触发顺序变更为自外向内,这就是事件捕获。

貌似没什么卵用,上一个利用事件冒泡的案例,反正我是经常会用到。

JS的事件冒泡和事件捕获

    
                
  • item1
  •             
  • item2
  •             
  • item3
  •             
  • item4
  •             
  • item5
  •             
  • item6
  •         

JS的事件冒泡和事件捕获

需求是这样的:鼠标放到li上对应的li背景变灰。

利用事件冒泡实现:

       $("ul").on("mouseover",function(e){
                $(e.target).css("background-color","#ddd").siblings().css("background-color","white");
            })

也许有人会说,我们直接给所有li都绑上事件也可以啊,一点也不麻烦,只要……

       $("li").on("mouseover",function(){
                $(this).css("background-color","#ddd").siblings().css("background-color","white");
            })

是,这样也行。而且从代码简洁程度上,两者是相若仿佛的。但是,前者少了一个遍历所有li节点的操作,所以在性能上肯定是更优的。

还有就是,如果我们在绑定事件完成后,页面又动态的加载了一些元素……

$("
  • item7
  • ").appendTo("ul");

    这时候,第二种方案,由于绑定事件的时候item7还不存在,所以为了效果,我们还要给它再绑定一次事件。而利用冒泡方案由于是给ul绑的事件……

    高下立判!


    转载自:http://www.cnblogs.com/qq9694526/p/5653728.html

    相关内容

    热门资讯

    伊朗议长:霸凌与敲诈的时代已经... 伊朗伊斯兰议会议长卡利巴夫8日在社交媒体上发文,强烈谴责美国“严重违反”伊美谅解备忘录。卡利巴夫说,...
    致癌油风暴延烧,台民意机构通过... 海峡导报综合报道 台湾“中联油脂”大豆油致癌物超标,民进党当局政策反复、一度盖牌引发民怨,台民意机构...
    伊朗强硬反击:打了85个美军重... 美伊冲突再起,美军对伊朗80多个目标进行了打击,伊朗方面强势反击。据伊朗学生通讯社7月8日凌晨报道,...
    美国对伊打击规模扩大,美伊谈判... 美国声称本次打击规模是先前的4至5倍,并撤销了对伊朗石油制裁的豁免,美伊谈判是否岌岌可危?凤凰卫视连...
    坐拥6套顶奢豪宅!140亿身价... 文丨金融八卦女特约作者:清炫36岁的全球流行天后“霉霉”,正式完婚了!当地时间7月3日晚,纽约麦迪逊...
    广西横州一被蛇咬伤女子不幸离世... 7月8日,新京报记者多方核实获悉,广西横州云表镇一名被蛇咬伤的女子不幸离世。参与救助的村民称,因道路...
    拉高“抗中”力道!亲绿媒体人矢... 台湾致癌毒油风暴延烧,赖清德当局延迟公布相关业者名单,遭批评处理慢半拍。面对要求相关官员下台负责声浪...
    伊朗伊斯兰革命卫队称对85个美... 【环球网快讯】综合英国《卫报》等媒体8日最新报道,伊朗伊斯兰革命卫队称,伊朗伊斯兰革命卫队对位于巴林...
    见证中原人居升级|中原芯首座四... 7月7日,通派龙湖·中原颂特邀郑州市房屋交易中心及郑州市不动产登记中心入驻项目现场,专项开展业主不动...
    伊朗革命卫队称击落美军MQ9无... 据伊朗媒体今天(7月8日)报道,伊朗伊斯兰革命卫队称在伊朗南部击落了一架美军MQ-9“死神”无人机。