2012-08-11 21 views
5

Soldan içe kaybolan, get() ile dinamik olarak içerik ekleyen bir yan bölmem var. Bölmenin dışındaki tüm tıklamaları, bir işlevi tetikleyerek kapanmasına neden olmasını istiyorum. Okuduğum diğer sorulara dayanarak, aşağıdaki kodla geldim.jQuery on() ve stopPropagation()

$('html').click(function() { 
    if (side_showing) { 
     close_side(); 
    } 
}); 

$(document).on("click", "#side", function(event) { 
    event.stopPropagation(); 
}); 

Çalışmayı başaramıyorum. on() işlevinin tetiklendiğini biliyorum, ancak event.stopPropagation görünmüyor. Herhangi bir ipucu?

+0

Gerçekten "stopPropagation();" ifadesinin anlamını biliyor musunuz? bir göz atın http://www.javascripter.net/faq/eventbubbling.htm#demo –

cevap

12

stopPropagation() yetki verilmiş olay işlemeyi (olay işleyicisinin üst öğede olduğu) kullanamazsınız.

Bu, olay işleyicinizin çağrıldığı zamanı temsil eden etkinlik olayının ilk etapta gerçekleşmesini sağlayan olay yayılımı olduğundan, olay zaten yayıldı.

Kodunuzda gerçekleşen şeylerin sırası şöyledir: belge nesnesine kadar olay yayılımı, ardından olay işleyiciniz aranır. Yani, event.stopPropagation()'u aradığınızda, olay zaten yayıldığı için hiçbir şey yapmaz.

Üst nesnelerin etkinlik yayılmasını engellemeye devam etmesi gerekiyorsa, o zaman temsilci olay işlemeyi kullanamazsınız. Olay işleyicilerini doğrudan nesnelerin kendilerine atamanız gerekir, böylece olay yayılmadan ÖNCE olayları engelleyebilir. Bunlar dinamik olarak oluşturulmuş nesnelerse, oluşturulduktan hemen sonra onlara olay işleyicileri atamanız gerekir.

Bildiğim tek diğer çözüm, olay işleyicilerini bu olayları görmek istemediğiniz ana nesnelere yerleştirmek ve bu olay işleyicilerinin,nesnesinden kaynaklanıyorsa olayları göz ardı ettiğinden emin olmaktır.

+0

Bir çözüm düşünebilir misiniz? – Harangue

+1

@ J4G - Yanıtıma bir çift seçenek eklendi. – jfriend00

+0

Bir nesnede .on ("click") kullandıktan sonra .click() kullanabilir miyim? – Harangue