2011-05-19 26 views
29

jQuery öğesindeki öğelerin tıklanması, gövdeye kadar kabarcığa neden olur. Bir uyarıyı gösteren bir gövdeye bağlanmış bir tıklama işleyicimiz varsa, herhangi bir öğeye tıklamak gövdeye kadar kabarcık oluşturur ve uyarıyı tetikler. Benim sorum, vücudun doğrudan tıklaması sonucu vücut uyarısının tetiklenip tetiklenmediğini veya vücudun kabarcığı nedeniyle tıklamanın tetiklenip tetiklenmediğini öğrenmenin herhangi bir yolu var.Kabarcık tıklamayı tetikleyip tetiklemediğini kontrol etmenin bir yolu var mı?

+1

:

Son bir seçenek eleman tane varsa bunlar da benzersiz olmak zorunda, çünkü bir kimliği karşılaştırmaktır. Bu tüm '.live' çağrılarını kıracaktır. –

cevap

51

this için event.target ile karşılaştır. this her zaman işleyicinin bağlı olduğu olaydır; event.target her zaman olayın kaynaklandığı öğedir. You have

$(document.body).click(function(event) { 
    if (event.target.nodeName.toLowerCase() === 'body') { 
     // event was triggered on the body 
    } 
}); 

durumda çünkü toLowerCase() yapmak: Bir belgedeki benzersiz olması tanıyıp durumunda

$(document.body).click(function(event) { 
    if (event.target == this) { 
     // event was triggered on the body 
    } 
}); 

(temelde, sadece body) ayrıca nodeName this arasında kontrol edebilirsiniz nodeName, tarayıcılar arasında tutarsızdır. Eğer, stopPropagation konusunda dikkatli olun ne olursa olsun

$('#foo').click(function(event) { 
    if (event.target.id === 'foo') { 
     // event was triggered on #foo 
    } 
}); 
+0

Açıklamalar için teşekkürler. – Pinkie

+0

Dostum, çok teşekkürler! :) –

5

Sen event.target ile nelerin tıklandığı kontrol edebilirsiniz: işleyici geçirilen

$(something).click(function(e){ 
    alert(e.target) 
}) 
2

"olay" parametresi olayın doğrudan hedefi olan elemana başvuran bir "hedef" özelliğine sahiptir. <body> öğesinin olup olmadığını kontrol etmek için bu özelliği kontrol edebilirsiniz.

jQuery ".delegate()" özelliğinin sizin için kontrol etmek için kullanılabileceğini unutmayın.

İlgili konular