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() 方法,阻止事件冒泡。

  • 相关阅读:
    linux 安装node.js 和npm
    laravel 记录
    apache-jmeter 使用记录
    将MD5值压缩成8位32进制生成8位长度的唯一英文数字组合字符串
    api接口开发跨域注意事项和设置
    阿里云服务器报 Liunx异常文件下载处理办法
    OpenGL ES 入门
    Spring AOP——Spring 中面向切面编程
    SpringIOC 二—— 容器 和 Bean的深入理解
    静态代理和动态代理
  • 原文地址:https://www.cnblogs.com/miaomiaomiao/p/4977607.html
Copyright © 2011-2022 走看看