zoukankan      html  css  js  c++  java
  • 事件冒泡

    有这么一段小程序

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 </head>
     7 <link rel="stylesheet" type="text/css" href="css/style.css">
     8 <script type="text/javascript" src="../jquery/jquery-1.3.1.js"></script>
     9 <script type="text/javascript">
    10     $(function(){
    11     $('#panel h5.head').click(function{
    12         $(this).next().show();
    13         })
    14     })
    15 </script>
    16 <body>
    17 <div id="panel">
    18     <h5 class="head">什么是jQuery?</h5>
    19     <div class="content">
    20         jQuery是继Prototype之后又一个优秀的JavaScript库,它是一个由 John Resig 创建于2006年1月的开源项目。jQuery凭借简洁的语法和跨平台的兼容性,极大地简化了JavaScript开发人员遍历HTML文档、操作DOM、处理事件、执行动画和开发Ajax。它独特而又优雅的代码风格改变了JavaScript程序员的设计思路和编写程序的方式。
    21     </div>
    22 </div>
    23 </body>
    24 </html>

    运行,华丽丽的一个错误,为什么 ,为什么 ,选择器没错吧,事件没错吧,那你效果为什么不出来,旁边同事来了句,事件冒泡~~~

    于是百度后,代码改成介个样子:

    1 <script type="text/javascript">
    2     $(function(){
    3     $('#panel h5.head').bind('click',function(){
    4         $(this).next().show();
    5         });
    6     })
    7 </script>

    OK,问题解决了,接下来对事件冒泡做个解释

    一、什么是事件冒泡

    在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。

    打个比方说:你在地方法院要上诉一件案子,如果地方没有处理此类案件的法院,地方相关部门会帮你继续往上级法院上诉,比如从市级到省级,直至到中央法院,最终使你的案件得以处理。

    二、什么是事件冒泡

    在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。

    打个比方说:你在地方法院要上诉一件案子,如果地方没有处理此类案件的法院,地方相关部门会帮你继续往上级法院上诉,比如从市级到省级,直至到中央法院,最终使你的案件得以处理。

    三、阻止事件冒泡

    通常情况下我们都是一步到位,明确自己的事件触发源,并不希望浏览器自作聪明、漫无目的地去帮我们找合适的事件处理程序,即我们明确最精准目标,这种情况下我们不需要事件冒泡。另外通过对事件冒泡的理解,我们知道程序将做多较多额外的事情,这必然增大程序开销。还有一个重要的问题是:事件冒泡处理可能会激活我们本来不想激活的事件,导致程序错乱,甚至无从下手调试,这常成为对事件冒泡不熟悉程序员的棘手问题。所以必要时,我们要阻止事件冒泡。

    看上面的例子,在没有阻止事件冒泡之前,其实是#panel的click事件,而不是我们选择的.head对象的事件,用bind(),live(),delegate() 方法,阻止事件冒泡。

  • 相关阅读:
    yolo_to_onnx ValueError: need more tan 1 value to unpack
    yolo_to_onnx killed
    C++ 实现二维矩阵的加减乘等运算
    Leetcode 1013. Partition Array Into Three Parts With Equal Sum
    Leetcode 1014. Best Sightseeing Pair
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 219. Contains Duplicate II
    Leetcode 890. Find and Replace Pattern
    Leetcode 965. Univalued Binary Tree
    Leetcode 700. Search in a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/miaomiaomiao/p/4977607.html
Copyright © 2011-2022 走看看