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

为什么jquery要设计focusin和focusout受冒泡影响呢?好处是什么?

为什么jquery要设计focusin和focusout受冒泡影响呢?好处是什么?相比之下blur与focus不受冒泡影响不是更方便吗?

提问者:weibo_一万群什麼_0 2016-07-18 14:45

个回答

  • 慕村7980457
    2016-08-10 18:10:06
    已采纳

    focus事件本身是不冒泡的,但是focusin可以,动态添加元素时,就不需重新绑定焦点事件,通过冒泡就能触发。即只要在父元素上添加focusin事件就相当于在子元素被点击时触发子元素的focus事件。


  • Frank_Yuan
    2016-10-07 16:57:22

    补充点。楼上说的这个好处呢,可以体现为性能的优化,假如没有事件的冒泡,你要处理子对象就要一个一个的去建立对象,当它可以在父类处理时,就只要一个对象就行了。不仅节约了内存,减少了对象的创建还减少了内存的处理时间。《js高级教程》可以看看

  • Minya
    2016-07-19 09:31:46

    focusin当一个元素,或者其内部任何一个元素获得焦点的时候会触发这个事件。这跟focus事件区别在于,他可以在父元素上检测子元素获取焦点的情况。例如:

    <p><input type="text" /> <span>focusout fire</span></p>
    <p><input type="password" /> <span>focusout fire</span></p>jQuery 代码:
    $("p").focusin(function() {
      $(this).find("span").css('display','inline').fadeOut(1000);
    });

    focusout(fn)当一个元素,或者其内部任何一个元素失去焦点的时候会触发这个事件。这跟blur事件区别在于,他可以在父元素上检测子元素失去焦点的情况。

  • qq_悠悠我心_4
    2016-07-18 17:57:42

    这就是focusin的好处之一,可以让父元素检测到子元素获取焦点的情况。比如

    HTML 代码:

    <p><input type="text" /> <span>focusout fire</span></p>
    <p><input type="password" /> <span>focusout fire</span></p>
         

    jQuery 代码:

    $("p").focusin(function() {
     $(this).find("span").css('display','inline').fadeOut(1000);
    });