zoukankan      html  css  js  c++  java
  • 关于事件冒泡和捕获的问题

    由于习惯于jquery的方便操作,往往让我们慢慢淡忘了原生js应有的功能和属性,今天重温一下事件冒泡和捕获问题。

    冒泡:从内向外,如:div > body > html (不同浏览器稍有不同)

    捕获:从外向内,如:html > body > div

    阻止冒泡或捕获:e.stopPropagation() || e.cancelBubble = true;

    例子,具体也可以随意修改予以测试:

    <!DOCTYPE HTML>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>冒泡捕获</title>
    		<link href="css/main.css"/>
    		<style type="text/css">
    
    		</style>
    	</head>
    	<body>
    		<div id="container">
    			<div id="level1" style="border:5px solid green;">
    				<div id="level2" style="border:1px solid #ccc;margin:20px;">
    					jfsdkljfklsdjklf <br><br><br><br><br><br><br><br><br><br><br>
    					jfsdkljfklsdjklf <br><br><br><br><br><br><br><br><br><br><br>jfsdkljfklsdjklf <br><br><br><br><br><br><br><br><br><br><br>jfsdkljfklsdjklf <br><br><br><br><br><br><br><br><br><br><br>jfsdkljfklsdjklf <br><br><br><br><br><br><br><br><br><br><br>jfsdkljfklsdjklf <br><br><br><br><br><br><br><br><br><br><br>jfsdkljfklsdjklf <br><br><br><br><br><br><br><br><br><br><br>
    				</div>
    			</div>
    		</div>
    		<script>
    
    
    		//标准浏览器,支持冒泡和捕获,ie91011
    		document.addEventListener('click', function(e){
    			console.log('document');
    			e.stopPropagation();
    		}, false); // 如果此处为true,则在从外向内捕获过程终止
    
    		document.getElementById('level1').addEventListener('click', function(){
    			console.log('level1');
    		}, false);
    
    		document.getElementById('level2').addEventListener('click', function(){
    			console.log('level2');
    		}, false);
    
    
    		//<=ie8,只支持冒泡
    		document.attachEvent('onclick', function(){
    			console.log('document');
    		});
    
    		document.getElementById('level1').attachEvent('onclick', function(e){
    			alert('level1');
    			e.cancelBubble = true;
    		});
    
    		document.getElementById('level2').onclick = function(e){
    			e = e || window.event;
    			alert('level1');
    			e.cancelBubble = true;
    		};
    
    		document.getElementById('level2').attachEvent('onclick', function(e){
    			alert('level2');
    			// e.cancelBubble = true;
    		});
    		
    		</script>
    	</body>
    </html>
    

      

  • 相关阅读:
    CSS3中的opacity透明度属性的继承问题如何解决
    webstorm前端开发工具vue环境配置及运行项目
    new String(getBytes(ISO-8859-1),UTF-8)中文编码避免乱码
    超详细多线程讲解
    jQuery mobile 核心功能
    解读四大移动web应用开发框架真相
    2014,成为更好程序员的7个方法
    window8.1使用之快捷键
    C#深入浅出 关键字(一)
    C#深入浅出 C#语法中的重中之重——委托(四)
  • 原文地址:https://www.cnblogs.com/jackliu6/p/3628758.html
Copyright © 2011-2022 走看看