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

案例:

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
       
    }
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,361评论 0 8
  • 今天面试回来,稍微整理下今天被问到的题目,呀,回答的是乱七八糟,最后百度整理下,以供以后学习。 1,vue 中事件...
    AlisaMfz阅读 482评论 0 0
  • 1.背景介绍 1.1什么是事件委托? 事件委托还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委...
    我叫于搞吧阅读 1,672评论 4 9
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,629评论 2 10
  • 死亡的恐惧总是笼罩着我,我无法从黑暗中走出来,我只有把这些写下来,让自己的心归入平静,也算是对“它”的申诉...
    苏墨大哥阅读 380评论 1 2