2014年辛星解读Javascript之DOM之冒泡和捕获[通俗易懂]

2014年辛星解读Javascript之DOM之冒泡和捕获

大家好,又见面了,我是全栈君。

     上篇博客提到了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使用量还非常大的国家,哎,仅仅能慢慢承受折磨了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115965.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux修改用户权限与所属组_linux修改用户组的权限

    linux修改用户权限与所属组_linux修改用户组的权限如何在linux下修改组权限chmodg+rpath/file加读权限当前目录chmod-Rg+rpath/file加读权限当前目录以及子目录g-r减读权限g+w加写权限g-wg+x加执行权限g-x经常会用到的命令,记一下。1.chgrp修改文件所属组#简单使用,将文本test.txt所属组改为gourp1chgrpgourp1test.txt2.chown修改文件拥有…

    2025年10月26日
    4
  • [ZZ] cbuffer和tbuffer

    [ZZ] cbuffer和tbuffer

    2021年7月9日
    87
  • python3.9多线程_Python进阶

    python3.9多线程_Python进阶什么是线程?线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其

    2022年7月31日
    6
  • Windows搭建SVN服务器「建议收藏」

    Windows搭建SVN服务器「建议收藏」写这篇文章其实是弥补6年前的一个遗憾,之前在第一家公司时,快要离职时,帮公司搭建一个SVN服务器,当时在Linux上面搭建,搭建的服务器不支持HTTP协议,无法在浏览器中查看,限于当时的能力,未能找到具体的解决方案。今天听同事在提SVN服务器,突然想搭建一个,搭建之后,Windows环境可以直接通过http协议访问,就这样吧,后续遇到SVN使用的具体问题再细究吧。需要的软件S…

    2022年7月19日
    14
  • 从零开始学_JavaScript_系列(27)——dojo的文档相关模块

    从零开始学_JavaScript_系列(27)——dojo的文档相关模块先上图:dojo/dom模块:dojo/dom参数:dom方法:①dom.byId(id,doc);用于通过id来选择某个dom结点;②dom.isDescendant(node,ancestor);确认某个node是否是另外一个结点的子节点;③dom.setSelectable(node,se

    2025年8月30日
    7
  • 免费提供一个完整股票分析软件源码(包含开发文档)

    免费提供一个完整股票分析软件源码(包含开发文档)很多人想开发股票分析软件。这里提供一套完整的股票分析软件源码,包含开发文档。程序可以完全编译成功,并运行。价格200元,有需要的可以邮件联系。30796007@qq.com …

    2022年6月29日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号