事件冒泡问题

事件冒泡问题

http://img1.sycdn.imooc.com//climg/5dbd53bf09caffef08340119.jpg这里老师说focus事件不是冒泡事件类型,那怎么它还是冒泡到document这里来了啊?还有怎么不在focus事件中阻止冒泡啊?而是重新绑定了一个click事件来阻止冒泡。

正在回答 回答被采纳积分+1

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

2回答
好帮手慕星星 2019-11-03 10:04:12

同学你好,

冒泡的并不是focus事件,而是点击click事件。当你聚焦input的时候,不仅触发了input元素的focus事件,还触发了点击事件,是点击事件进行了冒泡,触发了document的点击事件。

例如:

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

点击输入框之后:

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

可以再测试理解下,祝学习愉快!

欢迎采纳~

  • 提问者 Edward666 #1
    老师在处理冒泡之前,并没有给$input绑定click事件啊。老师我脑壳有点乱
    2019-11-03 10:33:52
  • 好帮手慕星星 回复 提问者 Edward666 #2
    冒泡并不是说子元素也必须绑定这个事件才可以冒泡,只要子元素有这个触发动作,事件就可以冒泡到父元素上。你可以把上面老师例子中给input绑定的点击事件去掉试试,仍然可以触发document的点击事件。所以冒泡的是点击事件,自己测试下。
    2019-11-03 10:42:56
  • 提问者 Edward666 回复 好帮手慕星星 #3
    我知道了,谢谢老师
    2019-11-05 09:17:28
好帮手慕慕子 2019-11-02 19:20:26

同学你好,focus事件确实不可以冒泡。可以参考如下解析理解

  1.  在冒泡阶段执行document的focus事件。 示例:

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

    打印结果如下, 输入框聚焦的时候, 只触发了输入框的focus事件, 没有向上冒泡触发document的focus事件

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

  2. 输入框和document同时绑定focus事件, 只有在捕获阶段才可以触发document的focus事件, 示例:

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


    打印结果如下, 因为捕获是从上到下去捕获的(html->body..一直到触发事件的元素),所以可以在捕获阶段触发document的focus事件。  

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

  3. 根据前两条的测试可以知道, focus事件是不能冒泡的, 所以不需要阻止冒泡哦

  4. 同学说的点击事件是指视频中, 老师给下拉层绑定的点击事件吗?

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

    如果是这样的话, 那么, 下拉层的html结构是ul>li元素, 这里绑定点击事件不是为了阻止冒泡,  而是利用点击事件的冒泡特性实现事件代理的作用哦

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

同学可以在回顾一下视频,再梳理一下老师实现的思路,帮助自己的更好的理解哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 提问者 Edward666 #1
    老师你好,我想问的是:$input绑定了focus事件而document绑定了click事件,视频中触发$input的focus事件会显示下拉层,然后点击其他地方会触发document的click事件。但是再次触发$input的focus事件时出现的情况是先显示下拉层然后隐藏下拉层,是$input的focus事件冒泡到document?
    2019-11-02 19:39:39
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

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

在线咨询

领取优惠

免费试听

领取大纲

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