• jQuery冒泡问题


    jQuery表单事件之blur与focus事件

    我们学过了表单处理事件focusin事件与focusout事件,同样用于处理表单焦点的事件还有blur与focus事件

    它们之间的本质区别:

    是否支持冒泡处理

    举个简单的例子

    <div>
      <input type="text" />
    </div>

    其中input元素可以触发focus()事件

    div是input的父元素,当它包含的元素input触发了focus事件时,它就产生了focusin()事件。

    focus()在元素本身产生,focusin()在元素包含的元素中产生

    blur与focusout也亦是如此

    具体参考下案例,给出来的区别

     1 <!DOCTYPE html>
     2 <html>
     3 
     4 <head>
     5     <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
     6     <title></title>
     7     <style>
     8     .left div,
     9     .right div {
    10         width: 500px;
    11         height: 50px;
    12         padding: 5px;
    13         margin: 5px;
    14         float: left;
    15         border: 1px solid #ccc;
    16     }
    17     
    18     .left div {
    19         background: #bbffaa;
    20     }
    21     
    22     .right div {
    23         background: yellow;
    24     }
    25     </style>
    26     <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
    27 </head>
    28 
    29 <body>
    30     <h4>.focusin与blur</h4>
    31     <div class="left">
    32         <div class="aaron">
    33             点击触发焦点(无反应):
    34             <input type="text" />
    35         </div>
    36         <div class="aaron1">
    37             点击触发焦点并冒泡:
    38             <input type="text" />
    39         </div>
    40     </div>
    41     <script type="text/javascript">
    42     $(".aaron").focus(function() {
    43         $(this).css('border', '2px solid red')
    44     })
    45     $(".aaron1").focusin(function() {
    46         $(this).find('input').val('冒泡捕获了focusin事件')
    47     })
    48     </script>
    49 
    50 
    51     <h4>.focusout与blur</h4>
    52     <div class="right">
    53         <div class="aaron3">
    54             点击触发失去焦点(无反应):
    55             <input type="text" />
    56         </div>
    57         <div class="aaron4">
    58             点击触发失去焦点并冒泡:
    59             <input type="text" />
    60         </div>
    61     </div>
    62     <script type="text/javascript">
    63     $(".aaron3").blur(function() {
    64         $(this).css('border', '2px solid red')
    65     })
    66     $(".aaron4").focusout(function() {
    67         $(this).find('input').val('冒泡捕获了focusout事件')
    68     })
    69 
    70     </script>
    71 
    72 </body>
    73 
    74 </html>

    解释1:

    你们看focus和blur事件都绑到了div上,你点击input或者点完移开失去焦点当然没反应了,因为input没有绑定事件啊。
    而focusin和focuout也绑在div上,为啥有反应呢?
    因为后者在你点input的时候会一级一级的往上面查父元素,如果父元素有事件就执行了,所以你看到了效果。这叫事件冒泡。
    为啥前者不行呢?因为前者不支持事件冒泡。

    解释2:

    这里的例子有点绕,总的来说就是从效果上来说,都是在获取或失去焦点时产生事件,并可以绑定处理函数。
    区别就在于focus和blur只能在input之类的表格元素本身上起效,当在他的父级元素上绑focus和blur事件时,因为它俩不冒泡,所以在外部的绑定其实是没有效果的。
    而focusin和focusout可以冒泡,所以就算是在父级绑定的这两个事件,只要是内部元素触发了获得和失去焦点的事件,一样可以冒泡出来,让父级元素绑定的事件捕获到,从而执行命令。

  • 相关阅读:
    安装pip
    Jmeter查看吞吐量
    maven打包为jar文件时,解决scope为system的jar包无法被打包进jar文件的解决方案。
    spring cloud unavailable-replicas
    IDEA实用插件
    spring-mvc项目整合jetty实现单war包自启动webapp
    集成多数据源支持和REDIS后只有一个配置能起作用的处理。
    spring整合redis缓存,以注解(@Cacheable、@CachePut、@CacheEvict)形式使用
    基于spring的aop实现多数据源动态切换
    安装Oracle11gR2先决条件检查失败的详细解决处理过程
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7476397.html
Copyright © 2020-2023  润新知