2009-11-10 18 views
13

Sitemde, tüm belge için bir tuşa basma olay işleyicisi kaydettim.JQuery tuşa basma olayı sadece bir öğe için nasıl devre dışı bırakılır?

$(document).keypress(myhandler); 

Ve ben bir listede dolaşmak için 'boşluk' tuşuna ele.

Sorun şu ki, bir <input type='text' /> öğesi var ve girdiye girildiğinde listeyi kaydırmak için 'boşluk' tuşunu istemiyorum.

Olayın kaynağının nerede olduğunu belirlemek için JQuery tarafından iletilen "olay" nesnesinde herhangi bir bilgi bulunamadı.

cevap

18

Alternatif olarak, olayın yayılmasını durdurmak girişi alanına başka olay işleyicisi takmak ve bu işleyicisinde olabilir do tam bir çapraz tarayıcı deneyimi için:

jQuery('#input-field-id').bind('keypress', function(e) { 
    e.stopPropagation(); 
}); 

Bu şekilde, global olay işleyicisini olduğu gibi bırakabilirsiniz. Temizlenebilir.

+0

Kesinlikle temiz. "E.stopPropagation(); – HRJ

+2

" 'e.preventDefault();' işlevini kullanın. –

3

Etkinliğin oluşturulduğu öğenin kimliği olacak event.target.id'u arıyorsunuz. Yani myhandler içeride sen event order hakkında QuirksMode dokümanlarını görün ve özellikle tarayıcıya özgü olan olayları nasıl kapatılacağı hakkında aşağıdaki

function myhandler(e) { 
    if (e.target.id !== 'id of input') { 
     /* rest of event handler */ 
    } 
} 
+0

Bu işe yarıyor! Teşekkürler! – HRJ

1

gibi bir şey gerekir. Alıntı:

function doSomething(e) 
{ 
    if (!e) var e = window.event; 
    e.cancelBubble = true; 
    if (e.stopPropagation) e.stopPropagation(); 
} 
İlgili konular