Blogger Information
Blog 81
fans 1
comment 0
visits 124132
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
js事件冒泡和事件捕捉
有什么是忘不了的的博客
Original
863 people have browsed it

js事件冒泡

当你给一个节点添加一个事件时,在这个事件被触发时该事件会沿着父节点向上传播只到传播到根节点时停止。在这个过程中所有传播到的节点上有这个事件时(第一个节点触发的事件)都会被触发,这就是事件传播。

冒泡事件是默认的处理方式。

实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div id="myDiv">Click me</div>
</body>
<script type="text/javascript">
		var myDiv = document.getElementById('myDiv');
		myDiv.onclick=function(){
			alert('div元素')
		}
		var body1 = document.getElementsByTagName('body')[0]
		body1.onclick=function(){
			alert('body元素')
		}
		var html1 = document.getElementsByTagName('html')[0]
		html1.onclick=function(){
			alert('html元素')
		}
	</script>
</html>

运行实例 »

    当你单击了页面中的<div>元素后,这个click事件会按照如下顺序传播

  • Element div

  • Element body

  • Element html

  • Document

    从<div元素沿着DOM树向上传播(但是不同的浏览器不同的版本是有着细微的差别的,有的会冒泡到window对象)只要这个元素上存在该事件(这里是click事件)就会触发该事件。

js事件捕获

捕捉和冒泡是传播的方向是相反的。

还是上面的例子

当你单击了页面中的<div>元素后,这个click事件会按照如下顺序传播

  • Document

  • Element html

  • Element body

  • Element div

先触发Document上的再依次往下传播最终到 用户触发的那个元素节点(这里是<div>元素)。

阻止事件冒泡


     

实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div id="myDiv">Click me</div>
</body>
<script type="text/javascript">
		var myDiv = document.getElementById('myDiv');
		myDiv.onclick=function(e){
			alert('div元素')
			var ev = e || window.event;
            	        if(ev && ev.stopPropagation) {
            	          //非IE浏览器
            	          ev.stopPropagation();
            	        } else {
            	          //IE浏览器(IE11以下)
            	          ev.cancelBubble = true;
            	        }
		}
		var body1 = document.getElementsByTagName('body')[0]
		body1.onclick=function(){
			alert('body元素')
			
		}
		var html1 = document.getElementsByTagName('html')[0]
		html1.onclick=function(){
			alert('html元素')
		}
	</script>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

    

这里介绍两个函数

addEventListener(event, listener, useCapture) 给元素追加事件

event :事件(如:click,等)必填

listener:函数 当触发上面的事件时要执行代码。(这里一般写函数名来调用函数) 必选

useCapture:若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。

removeEventListener(type, listener, useCapture) 移除追加的事件

type:事件(如:click,等)必填

listener:函数 

useCapture:若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。

你有可能会移除失败。原因是removeEventListener与addEventListener中的参数必须相同而且  listener 函数必须使用函数名来调用不能直接写 function 来定义,因为在内存中的位置不同,removeEventListener会认为是不同的 函数所以会移除失败。



Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post