2012-12-04 1 views
4

Google 클로저 구성 요소와 함께 사용할 때 stopPropagation이 작동하지 않는 이유를 파악하려고합니다. browserEvents에서는 제대로 작동하지만 구성 요소의 이벤트에서는 작동하지 않습니다. 즉 브라우저의 현상을 보여줍니다 아래 예제 코드를 참조하십시오 :Google 클로저 라이브러리 : 구성 요소의 stopPropagation

<html> 
<head> 
    <script type="text/javascript" src="closure/goog/base.js"></script> 
</head> 
<body> 

<div id="div1" style="border: 1px solid black; width: 500px; height: 300px; padding: 10px"> 
    <div id="div2"></div> 
</div> 

<script> 
    goog.require('goog.dom'); 
    goog.require('goog.ui.CustomButton'); 
    goog.require('goog.ui.Component'); 
    goog.require('goog.ui.Control'); 
    goog.require('goog.style'); 
</script> 

<script> 
    var outerBtn = new goog.ui.Control(); 
    outerBtn.decorate(goog.dom.$('div1')); 
    var innerBtn = new goog.ui.CustomButton('Inner Button'); 
    outerBtn.addChild(innerBtn, true); 
    outerBtn.setSupportedState(goog.ui.Component.State.FOCUSED, false); 
    innerBtn.setSupportedState(goog.ui.Component.State.FOCUSED, false) 

    goog.style.setStyle(innerBtn.getElement(), { 
     border : '1px solid red', 
     height : '100px' 
    }); 
    goog.events.listen(outerBtn, goog.ui.Component.EventType.ACTION, function() { 
     console.info('outer'); 
    }); 
    goog.events.listen(innerBtn, goog.ui.Component.EventType.ACTION, function(e) { 
     console.info('inner'); 
     e.stopPropagation(); 
    }); 
</script> 
</body> 
</html> 

답변

1

귀하의 예제 출력 :이 경우

inner 
outer 

는 e.stopPropagation 올바르게 작동합니다. 콘솔 출력 "outer"는 outerBtn의 자체 이벤트 핸들러 때문입니다. innerBtn에서 위로 버블 링되지 않았습니다. 또한 e.stopPropagation을 주석 처리하면 출력이 다음과 같이 변경됩니다.

innner 
outer 
outer