2010-12-13 13 views
11

Bir blogu canlandırmak için aşağıdaki kodu kullanıyorum. Benim kodumda,, halihazırda görünür durumda ise, belirtilen seçiciyle 'u gizler.Bir tıklama etkinliğinin belirli bir öğenin içinde mi patladığını belirlemek için jQuery'yi nasıl kullanabilirim?

$(document).click(function(event){ 
    if (/* the event's target has a parent of #container */) { 
     return false; 
    } else { 
     div_animate("#container"); 
    } 
}); 
: bildiğim kadarıyla söyleyebilirim, bu kod böyle bir şey olmazdı -

$(document).click(function(event){ 
    div_animate("#container"); 
}); 

Ben kullanıcı #container bir çocuğun tıkladım ve eğer öyleyse, return false; olmadığını belirlemek gerekir

Herhangi bir düşünce?

+0

bu [önceki soru] (http://stackoverflow.com/questions aynı konu var: Tamamen alternatif, daha basit bir yolu bu gibi #container tıklandığında sadece document kadar kabarcık önlemektir/4430277/jquery-animate-when-div-loses-focus) size [bu bağlantıyı] verdiğim yer (http://stackoverflow.com/questions/714471/jquery-hide-element-when-clicked-anywhere-on- sayfa)? – user113716

+0

@patrick Bu önceki soruyla aynı değil, ancak ilgili - bu sorun önceki sorudan çözüm eklediğimde ortaya çıktı. Bağlantınız orijinal soruma benzer olsa da, yararlı bulmadım. – Jazzerus

cevap

26

en basit şey olurdu:

if ($(event.target).is('#container *, #container')) // edited - thanks @gnarf 
    // is a child 
else 
    // is not a child 

bunu bir hedefin çocuk (veya hedef olmayan) konteyneri var olmadığını tespit etmek için yapabilir farklı seçenek vardır; bu sadece bir tane. Alternatif: Tıklama veya #container kökenli eğer eylemi önleyebilir

if ($(event.target).closest('#container').length) 
+1

Bu "konteyner" kendi başına bulamazdı ... Belki de $ (event.target) .closest ('# container'). Length 'veya '.is (' # container, #container * ') – gnarf

+1

Bu tam olarak istediğim şey. Hızlı cevap için teşekkürler! – Jazzerus

+1

@gnarf ah evet haklısınız - çoktan "en yakın" alternatifi ekledim ama ilkini düzeltirim. – Pointy

8

böyle: o #container kendisinden geldiyse

$(document).click(function(event){ 
    var c = $("#container")[0]; 
    if (event.target == c || $.contains(c, event.target)) { 
     return false; 
    } else { 
     div_animate("#container"); 
    } 
}); 

ilk onay İkincisi ise 'dir, bir çocuktan geldi, bu #container .

$("#container").click(function(e) { 
    e.stopPropagation(); 
}); 
$(document).click(function() { 
    div_animate("#container"); 
}); 
+0

İşte bu "#container" aramasını önbelleğe almadığım için sizi cezalandırmak için altın fırsatım, ama bahse girerim bu yorumu yazmayı bitirdiğim zaman düzenleyeceksin :-) – Pointy

+0

@Pointy - DOM öğesi olarak önbelleğe alınmıştı İlk yayınlanan sürümde ... –

+0

Hayır En çok şaka yapıyor olmama rağmen, işleyici işlevi veya bir şey etrafında bir kapatma işleminde önbelleğe aldım. – Pointy

İlgili konular