js 의 거품 사건 및 거품 을 어떻게 막 습 니까?

12272 단어 #js
사건 거품: 한 요소 의 사건 이 촉발 되 었 을 때 같은 사건 은 그 요소 의 모든 조상 요소 에서 촉발 된다.이 과정 은 사건 의 거품 이 라 고 불 린 다.이 사건 은 원시 요소 부터 DOM 나무의 맨 윗 층 까지 거품 이 일 었 다.(BUG)
예 를 들 어 마우스 가 단 추 를 누 르 면 부모 div 와 자식 div 가 함께 onclick 이벤트 에 가입 할 때 자식 div 의 onclick 이벤트 가 발생 하면 자식 div 는 해당 하 는 js 작업 을 합 니 다.하지만 부모 div 의 onclick 사건 도 촉발 된다.이 로 인해 사건 의 다 중 동시 다발 로 인해 페이지 가 혼 란 스 러 워 졌 다.이것 이 바로 거품 사건 이다.
거품 을 없 애 는 것 은 바로 이런 메커니즘 을 없 애 는 것 이다.JavaScript 이벤트 거품 전달 막 기 (cancelBubble 、stopPropagation) 호환성 코드
var e=(event)?event:window.event; //         
if (window.event) {
     
e.cancelBubble=true;//    ie          cancelBubble
} else {
     
e.stopPropagation(); //   firefox           stopPropagation
}

구체 적 인 예 는 다음 과 같다.
<html>
<head>
<title> js              title>
<meta charset="utf-8"/>
<script type="text/javascript">
function preventBubble (obj,event) {
      
alert(obj.id);
var e=(event)?event:window.event; //         
if (window.event) {
      
e.cancelBubble=true;//    ie          cancelBubble
} else {
      
e.stopPropagation(); //   firefox           stopPropagation
}
}
script>
	<style>
		.parent{
      
		    width:200px;
			height:200px;
			background-color:yellow;
			text-align:center;
			display:flex;
			align-items: center;
		}
		
		.parent:last-child{
      
		    margin-top:20px;
			background-color:gray;
		}
		
		.child{
      
		    width:100px;
			height:100px;
			background-color:orange;
			margin:0 auto;
		}
		
	style>	
head>
<body>
 
<div id="parent1" onclick="alert(this.id)" class="parent">parent1
    <div id="child1" onclick="alert(this.id)" class="child">child1div>
div>


<div id="parent2" onclick="alert(this.id)" class="parent">parent2
     <div id="child2" onclick="preventBubble(this,event);" class="child">child2div>
div>
body>
html>

좋은 웹페이지 즐겨찾기