上篇博客提到了Javascript事件绑定函数的三个參数。第一个是一个event。第二个是一个function。第三个是一个布尔变量。它用于指定事件传递的顺序,分为冒泡和捕获两种方式,接下来我们将揭开它的神奇面纱,彻底的解读它。

首先看例如以下代码:

<html>
<body>
<div id = "demo"><p id = "tag">辛星</p></demo>
<script type="text/javascript">
document.getElementById("demo").addEventListener("click",mydemo);
document.getElementById("tag").addEventListener("click",myshow);
function myshow(){ alert("标签p被触发");}
function mydemo(){ alert("标签div被触发");}
</script>
</body>
</html>

那么对于上述HTML文件,假设我们点击了“辛星”这个字样,那么先出现哪个弹窗呢?假设读者把上述代码拷贝下来,后缀命名为一个HTML文件,那么会发现它先弹窗“标签p被触发”。等我们对它点了确定之后,才是“标签div被触发”,那么,这是什么机制呢?

这就是由于第三个參数在起作用,第三个參数默认是false,即採用冒泡的方式,什么是冒泡呢?假设大家学习过算法。会发现有个冒泡排序,非常easy,就是气泡会从下向上浮动。这样的方式表示我们先响应小的标签。再响应大的标签,比方这里p标签就是div标签的子元素,因此。这里先响应p标签绑定的事件。然后再响应div标签绑定的点击事件。

假设把第三个參数改成true。则效果正好相反,先响应父标签的事件。再响应子标签的事件。假设就讲这些东西,显得这篇博文是凑数的,那么我们就再介绍一些东西。这里说一下removeEventListener这个函数。它用于解除绑定,即把我们的事件和事件的回调函数解除绑定。

只是这个addEventListener和removeEventListener对于浏览器的兼容性上并非那么好,还是IE系列在作怪,IE8之下的版本号不支持,可是IE8支持使用element.attachEvent(event。function)来绑定,用element.detachEvent(event,function)来解除绑定。

对于浏览器的兼容性。确实一个比較让人头疼的问题。特别是在中国这样的IE使用量还非常大的国家,哎,仅仅能慢慢承受折磨了。

2014年辛星解读Javascript之DOM之冒泡和捕获的更多相关文章

  1. 2014年辛星解读Javascript之DOM之事件及其绑定

    我们通过DOM的事件能够对HTML的事件作出反应.就像我们用其它编程语言写GUI一样,那么HTML包含哪些事件呢?以下是几个常见的样例,比方网页已经完毕记载,图像完毕载入,鼠标移动到元素上方.输入文字 ...

  2. 2014年辛星解读Javascript之DOM高速入门

    在Javascript的知识中,有一个所谓的DOM.即文档对象模型,我们能够通过它来訪问HTML文档的元素,当网页被载入的时候,浏览器会去创建DOM,有了这个DOM.我们能够使用Javascript去 ...

  3. 2014年辛星解读Javascript之用DOM动态操纵HTML元�

    关于DOM,我们了解了能够用DOM操纵HTML的一些属性和样式,还能够为HTML元素绑定事件等等,那么接下来,我们将涉及到用DOM来动态的创建.删除HTML等一些操作,我的核心思路还是重实战,因此,代 ...

  4. 2014年度辛星解读css第四节

    接下来的这一节我计划解说的是超链接和列表的样式,然后我们做出一个导航栏出来,事实上导航栏是很常见的,可是我们这里做得这个有点并不那么完好,等我们学完了css之后再完好它. ************** ...

  5. 2014年辛星解读css第一节

    CSS是Cascading Style Sheets的缩写.即层叠样式表,它用于表现HTML的样式,即HTML仅仅是去写该网页有哪些内容,至于怎样去表现它们,由CSS去定制. ************ ...

  6. 2014年辛星解读css第五节

    本小节我们解说css中的"盒模型".即"box model",它通经常使用于在布局的时候使用,这个"盒模型"也有人成为"框模型&q ...

  7. 2014年辛星解读css第二节

    第一节我们简单介绍了一下CSS的工作流程,我相信读者会有一个大体的认识,那么接下来我们将会深入的研究一下CSS的细节问题,这些问题的涉及将会使我们的工作更加完好. *************凝视*** ...

  8. 2014年辛星解读css第六节

    这一节我们就要讲到布局了,事实上布局本身特别简单.可是要合理的布好局就不那么简单了,就像我们写文章一样.写一篇文章非常easy,可是要写一篇名著就非常难了,这须要我们扎实的功底和对文学的理解,可是.千 ...

  9. 2014年辛星解读css第三节

    第二节我们讲述的差点儿全是CSS的选择器,那么以下这一节我们来讲一下CSS的颜色和文本的一些东西,尽管我对调色不大敏感.可是对于颜色还是比較感兴趣的. *********CSS中的颜色******** ...

随机推荐

  1. <select>标签后循环加入选项<option>——jquery

    if (data.ReplaceDataFields != null) { $.each(data.ReplaceDataFields, function (i, item) {            ...

  2. 编程好帮手----CodeSmith Generator Studio

    这是一个很好用的代码生成器,可以将数据库中的表生成类,这是和表中的字段一一对应这就很给力了,方便准确

  3. easyui的验证

    加一个JS来重写验证,文件名为:validator.js 内容为: //扩展easyui表单的验证 $.extend($.fn.validatebox.defaults.rules, { //验证汉子 ...

  4. 动态设置 GridView 列宽

    /// <summary>        /// 设置简单评语列的宽度        /// </summary>        /// <param name=&quo ...

  5. MySql5.6Window超详细安装教程(msi 格式的安装)

    转自:红黑联盟  http://www.2cto.com/database/201506/409821.html 一.安装包准备 1.下载MySql5.6 http://www.mysql.com/ ...

  6. Java语言导学笔记 Chapter 8 Thread

    8.1 什么是线程 def: 线程是程序内的一个单一的顺序控制流程 作为一个顺序的控制流程,线程必须在运行它的程序中占用一些资源.例如,线程必须有它自己的执行堆栈和程序计数器.在线程内运行的代码只在此 ...

  7. 使用chrome调试xpath

    使用chrome调试xpath 相信玩过爬虫的都知道一些库,如lxml(python),可以使用xpath方便地对HTML进行提取,但当真正用的时候,问题就来了,想找到一个元素往往要调试好几遍,而且得 ...

  8. javaTemplates-学习笔记三

    Routes入口 后台语言的应用入口都是从routes开始的,想要新建一个页面得学会配置routes. conf/routes 文件定义了全部应用URL的动作(Action),如果当浏览器请求访问ht ...

  9. zend framework virtualhost设置方法

    Phpunit 的用法 php phpunit.phar 就可以运行phpunit了 修改本地域名vhost F:\Tools\wamp\bin\apache\apache2.4.9\conf\ext ...

  10. MySQL远程(IP)连接报错:Host 'IP地址' is not allowed to connect to this MySQL server

    ERROR 1130: Host ’192.168.1.3′ is not allowed to connect to this MySQL server这是告诉你没有权限连接指定IP的主机,下面我们 ...