问答详情
源自:3-1 jQuery表单事件之blur与focus事件

没怎么理懂,div里要是有好几个input呢?冒泡不是由里向外么?

focusin()在元素包含的元素中产生,怎么产生的?通过点击元素中的元素?然后触发了啥?

我印象中的冒泡是当div与其中的元素都绑定了click事件时,点击里面的元素会向外冒泡,触发div的点击事件

提问者:Qzhor 2016-07-14 09:35

个回答

  • Cshine
    2016-07-27 14:57:11

    blur、focus事件在元素本身产生,不支持冒泡;focusin、focusout事件支持冒泡。并要注意不是所有元素都能够接收焦点的.能够响应用户操作的元素才有焦点

    所以

     $(".aaron").focus(function() {

            $(this).css('border', '2px solid red')

        })

    这里父级div虽然绑定了focus事件,但是由于是子元素input获得了焦点,也就是input触发了focus事件(当然同时也触发了focusin事件)但是input却没有绑定事件处理函数,所以input不会有什么反应,再因为focus不支持冒泡,所以父级div的focus事件并不会被触发,综上所述就没有任何反应了

    而$(".aaron1").focusin(function() {

            $(this).find('input').val('冒泡捕获了focusin事件')

             $(this).css('border', '2px solid red')

        })

    这里父级div绑定了focusin事件,子元素input获得了焦点后触发了focusin事件(当然同时也触发了focus事件),又因为支持冒泡,所以父级div的focusin事件就被触发了,就出现反应了


  • 邪君灬无情
    2016-07-23 11:57:21

    和click是同样的道理,点击了里面的元素,然后因为冒泡,也触发了父级元素事件

  • 那些你很冒险的梦_
    2016-07-21 18:07:04

    focus和blur都是表单input事件,而aaron不是表单元素,是div,所以当然不会有反应了。

  • guoguo13
    2016-07-15 11:20:50

    首先要清楚focusin和focusout是鼠标事件,focus和blur是表单事件。 focus和blur不支持冒泡事件

    你对冒泡事件的理解有误,http://www.cnblogs.com/webflash/archive/2009/08/23/1552462.html,看看这个希望可以帮助你

     $(".aaron").focus(function() { $(this).css('border', '2px solid red')    }) 这部分不会有反应的原因是,聚焦input后,它并不会向上寻找有包含类为aaron的div,也就不会为这个div设置样式(不会去执行它的父级上的事件)

  • Qzhor
    2016-07-14 09:41:20

    这两个无反应是为啥?。。