zoukankan      html  css  js  c++  java
  • 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可以冒泡,所以就算是在父级绑定的这两个事件,只要是内部元素触发了获得和失去焦点的事件,一样可以冒泡出来,让父级元素绑定的事件捕获到,从而执行命令。

  • 相关阅读:
    caffe常用层: batchNorm层和scale层
    简述configure、pkg-config、pkg_config_path三者的关系
    python删除list中元素的三种方法
    Leetcode 872. Leaf-Similar Trees
    Leetcode 508. Most Frequent Subtree Sum
    Leetcode 572. Subtree of Another Tree
    Leetcode 894. All Possible Full Binary Trees
    Leetcode 814. Binary Tree Pruning
    Leetcode 557. Reverse Words in a String III
    python 多维list声明时的小问题
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7476397.html
Copyright © 2011-2022 走看看