2014-04-13 17 views
10

Aşağıda komut dosyası ile karıştı: benim tarayıcısında bu komut dosyasını çalıştırdığınızdaBelirli bir olayı dispatchEvent ile neden tetikleme, olayların köpürme davranışına uymuyor?

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); 

, sadece alert ('body') olsun; olay. fakat addEventListener (üçüncü isteğe bağlı parametre) 'nin yakalama parametresini true değerine ayarlıyorumsa, gereken tüm uyarıların olması gerekir.

Neden shazam event balonu bulamıyor mu?

+1

yerine Event' 'bir' CustomEvent' oluşturma ve –

+0

o 'ikinci parametre olarak TRUE (canBubble parametresi) geçmesi özellik 'canBubble' denilmiyor gibi görünüyor, bu 'kabarcıklar' dir. – Shnd

cevap

20

Sen true kabarcıklar özelliğini ayarlamak gerekir ve balon,

event.initEvent("shazam",true); 
izin ikinci argüman olarak gerçek geçirerek, inşaat

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

veya initEvent eski yol boyunca bunu yapmak zorunda

MDN Doc

+0

Yanıtınız için teşekkür ederiz :) – Shnd

+0

Ama bir soru: neden kabarcıklanma olay nesnesinde varsayılan olarak devre dışıdır. – Shnd

+1

Varsayılan olarak https://dom.spec.whatwg.org/#interface-event (veya isterseniz https://developer.mozilla.org/en-US/docs/Web/API/ adresine göre yanlıştır) Etkinlik/Etkinlik). Bu, varsayılan olarak en az olası yan etkileri olan seçeneği sağlamak olduğunu tahmin eder. –