关于数据挂载的问题

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,问题解答如下:

1. click事件是添加在“.left-item”的父元素“menu-inner”上,但是实际触发该事件,是通过点击“.left-item”,即点击“.left-item”时,事件会往上冒泡,冒到父元素“menu-inner”时,发现它绑定了click事件,所以就执行了“menu-inner”的事件处理程序。

对于事件委托和冒泡,建议同学花点时间,再复习一下该章节:https://class.imooc.com/lesson/777#mid=19550,这样有助于同学理解。

 2. 在jquery的事件委托中,e.currentTarget指的是实际触发事件的元素,该点和原生js不同,如下:

http://img1.sycdn.imooc.com//climg/5ef178c5097aba3b12880485.jpghttp://img1.sycdn.imooc.com//climg/5ef178c909b5044a09440280.jpghttp://img1.sycdn.imooc.com//climg/5ef178cd09b4f48c08800487.jpghttp://img1.sycdn.imooc.com//climg/5ef178d1096341cf08030291.jpg

对于该点,同学不要纠结,直接打印看一下e.currentTarget指的是谁就可以了。

祝学习愉快!

好帮手慕久久 2020-06-22 17:30:27

 同学你好,问题解答如下:

1. “$('.menu-inner').on('click', '.left-item', function(e){)) ”和“

$('.left-item').on('click', function(e){})”这两种方式都能实现为“.left-item”绑定事件,但是二者略有不同,区别如下:

这种写法“$('.menu-inner').on('click', '.left-item', function(e){)) ”是将click绑定在了“.left-item”的父元素'.menu-inner'上,利用事件冒泡的原理,间接的实现了为'.menu-inner' 中的子元素“.left-item”绑定事件。

而“$('.left-item').on('click', function(e){})”是直接为页面上所有'.left-item'绑定点击事件(也就是另一位老师所表达的意思:没有限制父级)。

2. 同学疑惑的点在于为谁绑定事件,从原理上讲,事件委托是将事件绑定在父级上,即“$('.menu-inner').on('click', '.left-item', function(e){)) ”这句代码是给“.menu-inner”绑定click事件,但是实际触发点击事件的是“.left-item”,所以通常会直接说为“.left-item”绑定事件。

祝学习愉快!

  • 提问者 慕运维5475419 #1
    问题1 $('.menu-inner').on('click', '.left-item', function(e){ var $target = $(e.currentTarget); 这里是怎么运用冒泡机制 间接的实现了为'.menu-inner' 中的子元素“.left-item”绑定事件的? 问题2:e.currentTarget应是是指向事件绑定标的,这里绑定的是.menu-inner,那指向的也是它?
    2020-06-23 10:09:32
好帮手慕久久 2020-06-22 16:10:11

同学你好,这两张图中的$target都是指左侧菜单里的元素:

http://img1.sycdn.imooc.com//climg/5ef0668409901b1502890425.jpg

先看initContentList这个方法中的$target,如下:

http://img1.sycdn.imooc.com//climg/5ef0669409a282c712380729.jpg

可以打印看一下:

http://img1.sycdn.imooc.com//climg/5ef0669f09112c6508010321.jpghttp://img1.sycdn.imooc.com//climg/5ef066a4091a483409420250.jpg

即:initContentList方法中,通过遍历,为左侧每一个“left-item”都绑定了它们对应的数据。

再看addClick()方法中的$target:

在addClick()方法中,采用的是事件委托的方式,一次性的为每一个“left-item”都绑定上了点击事件,如下:

http://img1.sycdn.imooc.com//climg/5ef06709094046ed22970468.jpg

点击事件触发时,$target指的是触发事件的那个“left-item”,可以打印看一下:

http://img1.sycdn.imooc.com//climg/5ef0671a0904d85c11520316.jpg

所以两张图上的$target都是指的左侧的“left-item”,同学可以通过打印,自己验证一下。

如果我的回答帮到了你,欢迎采纳,祝学习愉快!


  • 提问者 慕运维5475419 #1
    $('.menu-inner').on('click', '.left-item', function(e){ var $target = $(e.currentTarget); 老师,根据另一个问题的回答,这里的代码的意思应该是为.menu-inner元素下的.left-item元素绑定事件吧,参考如下 https://class.imooc.com/course/qadetail/234188
    2020-06-22 16:35:16
  • 提问者 慕运维5475419 #2
    $('.menu-inner').on('click', '.left-item', function(e){ var $target = $(e.currentTarget); 这里写$('.menu-inner').on('click', '.left-item', function(e){ var $target = $(e.currentTarget); 和写 $('.left-item').on('click',, function(e){ var $target = $(e.currentTarget); 的区别是什么
    2020-06-22 17:02:21
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师