事件流

106 阅读1分钟

title: 事件流

  • JS事件流最早要从IE和网景公司的浏览器大战说起,IE提出的是冒泡流,而网景提出的是捕获流,后来在W3C组织的统一之下,JS支持了冒泡流和捕获流,但是目前低版本的IE浏览器还是只能支持冒泡流(IE6,IE7,IE8均只支持冒泡流),所以为了能够兼容更多的浏览器,建议大家使用冒泡流。

事件作用范围

	//css

	<style type="text/css">
		#wrap {
		  width: 200px;
		  height: 200px;
		  background: orange;
		}
		#content {
		  position: relative;
		  top: 50px;
		  left: 50px;
		  width: 100px;
		  height: 100px;
		  background: #eeddff;
		}
		#inner {
		  position: relative;
		  top: 25px;
		  left:25px;
		  width: 50px;
		  height: 50px;
		  background: #44ddff;
		}
	</style>


	//html
	<div id="wrap">
		<div id="content">
			<div id="inner"></div>
		</div>
	</div>

	//js
	<script>
		var wrap = document.getElementById('wrap');
		wrap.addEventListener('click',function(){
			alert('789');
		},false);
	</script>

	//当点击warp块(包括被子元素的部分)任何一部分时,都会弹出789。这是相当于3个click作用在其上。
试验

css html同上,

	//script
	var wrap = document.getElementById('wrap');
	var content = document.getElementById('content');
	var inner = document.getElementById('inner');

	wrap.addEventListener('click',function(){
		alert('789');
	},false);
	content.addEventListener('click',function(){
		alert('456');
	},false);
	inner.addEventListener('click',function(){
		alert('123');
	},false);

这样执行的话,就会先弹出123,然后弹出456,最后弹出789。

DOM事件流

css html 同上

		var wrap = document.getElementById('wrap');
		var content = document.getElementById('content');
		var inner = document.getElementById('inner');
		wrap.addEventListener('click',function(){
		  alert('wrap');
		},true);
		content.addEventListener('click',function(){
		  alert('content');
		},true);
		inner.addEventListener('click',function(){
		  alert('inner');
		},true);

		wrap.addEventListener('click',function(){
		  alert('wrap11');
		},false);
		content.addEventListener('click',function(){
		  alert('content11');
		},false);
		inner.addEventListener('click',function(){
		  alert('inner11');
		},false);

这样点击中心执行 会先弹出wrap 在弹出content 后弹出inner 然后弹出inner11,content11,wrap11。 按上面的例子为,先调用冒泡阶段的事件处理程序,再调用捕获阶段的事件处理程序。