2010-09-24 22 views
6

giriþinde doðrudan çalþtýrýlmadýðýnda, anahtarlayýcýda yapýyor ama ben bir textarea/input ve bu tuþlar basýlýyken fonksiyonlarý AÇMAMANIZI nasýl anlamasýný anlamiyorum. aka: kullanıcı textarea/input değilse, kullanıcı bu tuşa bastığında etkinliği başlatır.jquery: Bu kişi, bir textarea veya girdisi

$('body').keyup(function (event) { 

var direction = null; 
if (event.keyCode == 37) { 
    $('#wrapper').fadeOut(500) 
} else if (event.keyCode == 39) { 
     $('html,body').animate({scrollTop: $('body').offset().top}, {duration: 1500, easing: 'easeInOutQuart'} 
     ) 
return false;  
} 
    }) 

cevap

10

Sadece event.target kontrol Bu durumda hala (vücuduna bağlı) tek bir olay işleyicisi olacak ama o kadar olay işleyicileri sayfada sahip olduğu kadar unsurlar katacak beri

+0

Neden hiç bir zaman işlemek istiyorsanız, etkinliği ilk etapta atayın? – GenericTypeTea

+1

Burada, girdiye değil, gövdeye olay atarız. Ve daha sonra sadece Daha sonra verimli şekilde yapılmasını girdiler – fantactuka

+1

1 hariç tüm öğelere olay atamak çok daha iyi .. giriş ve textarea ile filtre – Thariama

1

Dene:

$('body').keyup(function(event) { 
    if ($(event.target).is(':not(input, textarea)')) { 
     ... 
    } 
}); 

yılında:

$('body *:not(textarea,input)').keyup(function (event) { 

}); 
+1

Böyle seçim doğru olayı recieves elemanları filtreler. – fantactuka

+0

hemen hemen (textareas dahil değildir), ama bu işe yarayacak – Thariama

1
$('body :not(textarea,input[type=text])').keyup(function (event) { 

veya

$('body').not('textarea,input[type=text]').keyup(function (event) { 
+0

Bu bir sorun o Thariama'nın çözüm – fantactuka

+0

istediği gibi aynı sorun var. –

+0

Sadece sayfanın 10000 öğesi olduğunu (çok fazla değil) düşünün. Her öğeye etkinlik atayacak mısınız? Bu mantıklı değil – fantactuka