老师你好,事件委托问题

来源:2-7 实现垂直菜单

weixin_慕码人7523200

2021-11-30 22:43:36

记得老师之前将时间委托时,说最内层元素不能再有额外的内层元素了:

相关截图:

https://img.mukewang.com/climg/61a637830923310503770207.jpg

但是,在视频中老师给ul添加事件委托,li里面还有额外的内层元素:

相关截图:

https://img.mukewang.com/climg/61a638230942d6d706710368.jpg

https://img.mukewang.com/climg/61a637c2095fb4c006760376.jpg

这个让我相当疑惑,这是为什么?

还有,截图中为什么要先判断if(e.target.tagName.toLowerCase()=='li')然后再去e.target.getAttribute('data-t')呢,直接e.target.getAttribute('data-t')不行吗?

https://img.mukewang.com/climg/61a6377809e1d27603700202.jpg            下载视频          
写回答

1回答

好帮手慕久久

2021-12-01

同学你好,解答如下:

1、事件委托的课程中,老师课件写的是如下形式:

https://img.mukewang.com/climg/61a6dac509df0eea12730392.jpg

但是在描述时,老师说的是“使用事件委托时,....,最好....,不要再创建内层元素了”(https://class.imooc.com/lesson/1626#mid=38889 12分40秒左右 )。“最好”这个词其实就隐含着,“可以嵌套内层元素”,但是此时可能存在一些不好处理的情况(如果处理不好,就可能出错),所以不推荐嵌套元素。但是如果我们能处理好,或者没有出现不好处理的情况,那么嵌套也是可以的。

2、本课程中,虽然li中内嵌了元素,但是使用事件委托时,我们能处理好各种情况,所以可以使用。

3、不能直接写成e.target.getAttribute('data-t'),因为li中有内嵌元素;鼠标移入li时,e.target获取的可能不是li自身,而是li的子元素,可以打印看一下:

https://img.mukewang.com/climg/61a6dcb30917cab606840133.jpg

https://img.mukewang.com/climg/61a6dcc1098ee74705370434.jpg

如果获取的是li的子元素,由于子元素没有data-t属性,无法获取data-t属性,因此直接写e.target.getAttribute('data-t')会影响代码运行。

if(e.target.tagName.toLowerCase()=='li')这句代码的意思就是,判断一下我们移入的是不是li,如果移入的是li,才进一步获取data-t属性,然后做一系列操作,这样可以防止代码运行出错。

祝学习愉快!

0

0 学习 · 15276 问题

查看课程