2014-04-13 6 views
10

나는 아래의 스크립트를 혼란 스러워요 : 내 브라우저에서이 스크립트를 실행하면왜 dispatchEvent로 정의 된 이벤트를 발생시키는 것이 이벤트의 버블 링 동작을 따르지 않습니까?

var event = new Event('shazam'); 

document.body.addEventListener('shazam',function(){ 
    alert('body'); 
}); 

document.addEventListener('shazam',function(){ 
    alert('document'); 
}); 

window.addEventListener('shazam',function(){ 
    alert('window'); 
}); 

document.body.dispatchEvent(event); 

, 나는 그냥 경고 ('몸')를 얻을; 이벤트. 하지만 addEventListener (세 번째 선택적 매개 변수)의 캡처 매개 변수를 true로 설정하면 모든 경고가 순서대로 캡처됩니다.

샴페인 이벤트이 거품을 일으키지 않습니까?

+1

대신 Event' '의'CustomEvent'를 만들고 그것을 –

+0

'번째 매개 변수로 TRUE '(canBubble 파라미터)를 통과 속성은 'canBubble'이라고하지 않는 것 같습니다. '거품'입니다. – Shnd

답변

20

당신은 참으로 거품 속성을 설정해야합니다, 당신은 거품을

event.initEvent("shazam",true); 
수 있도록 두 번째 인수로 진정한 통과, 건설

var event = new Event('shazam',{bubbles:true}); 

또는 initEvent와 옛날 방식 동안이 작업을 수행해야

MDN Doc

+0

간단한 응답 주셔서 감사합니다 :) – Shnd

+0

한 가지 질문 : 기본적으로 이벤트 객체에서 거품 생성이 기본적으로 비활성화되어 있습니다. – Shnd

+1

https://dom.spec.whatwg.org/#interface-event (또는 원하는 경우 https://developer.mozilla.org/en-US/docs/Web/API/)에서 기본값은 false입니다. 이벤트/이벤트). 나는 이것이 최소한의 부작용을 기본적으로 가지고있는 옵션을 제공하는 것이라고 생각한다. –