美文网首页
js学习笔记:DOM事件委托运用的复杂案例

js学习笔记:DOM事件委托运用的复杂案例

作者: yang走向前端 | 来源:发表于2017-03-15 13:54 被阅读0次

案例:

QQ截图20170315133057.png

box2在box1里面

需求:点击box1可改变box1颜色但不改变box2的颜色,点击box2可改变box2颜色,box2的点击事件必须在父元素box1代理。

思路:因事件代理的运作原理是子元素事件冒泡到父元素事件触发执行,所以子元素不能用阻止冒泡方法,需在父元素的事件触发对target进行判断:

$('.box1').addEventListener('click',function(e){
    if(e.target.className==='box1'){   //判断目标是不是box1
        $('.box1').style.backgroundColor='yellow'
     }
    if(e.target.className==='box2'){  //判断目标是不是box2
        e.target.style.backgroundColor='#FFF'
    }
})

在实际工作中,由于子元素可能是很多个,或者是动态数量,不可能给每个元素添加事件触发,需在父元素事件代理。但父元素本身可能也绑定了事件,所以需在触发事件前判断目标

把案例再进阶复杂化:


QQ截图20170316231730.png

需求:点击box1可改变box1颜色但不改变box2的颜色,点击box2可改变box2颜色,点击box3可改变box2和自身的颜色,所有点击事件必须由父元素box1代理。
PS:这情况在实战中其实也很容易碰到,例如ul里有li,li里又有a,ul绑定事件1,li绑定事件2,点击li里的元素也要绑定事件2

$('.box1').addEventListener('click',function(e){
    if(e.target.className==='box1'){
        $('.box1').style.backgroundColor='yellow' //事件1
     }
    if(e.target.className==='box2'||e.target.parentNode.className==='box2'){
        $('.box2').style.backgroundColor='#FFF'  //事件2
       
    }
})

相关文章

  • js学习笔记:DOM事件委托运用的复杂案例

    案例: box2在box1里面 需求:点击box1可改变box1颜色但不改变box2的颜色,点击box2可改变bo...

  • 2021-03-01

    js 1. 事件委托事件委托指的是,不在事件的发生地(直接 dom)上设置监听函数,而是 在其父元素上设置监听函数...

  • Day10--DOM&BOM

    DOM简单学习:为了满足案例要求 事件简单学习 BOM DOM 事件监听机制

  • AJAX加载了HTML但是HTML里面的CLICK事件无效?如何

    原因:ajax载入新dom之前js就加载完了,click事件没有绑定到新载入的dom上解决方法:使用事件委托,将事...

  • web 4.JavaScript高级

    今日内容: DOM简单学习:为了满足案例要求 事件简单学习 BOM: DOM: 事件监听机制:

  • 10.javaScript高级

    主要内容: DOM简单学习:为了满足案例要求 事件简单学习 BOM: DOM: 事件监听机制:

  • js事件委托(事件代理)

    定义:事件委托就是在DOM事件的冒泡阶段,把具体dom上发生的事件委托给父元素或祖先元素去处理。原理:要了解委托的...

  • 前端问(面试)题

    dom执行顺序 事件委托原理 原型链的作用,与作用域链的区别 js事件轮询原理、JavaScript的运行机制 结...

  • DOM 原生JS实现事件委托

    DOM事件 事件通俗的讲,就是onClick ,onMouseIn,onMouseOut等等诸如此类的都是事件.也...

  • JavaScript Events事件汇总

    事件参数、事件捕获冒泡 事件委托 事件默认行为 DOM 1 、DOM 2、DOM 3模型 实现遮罩功能(点击穿透、...

网友评论

      本文标题:js学习笔记:DOM事件委托运用的复杂案例

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