2010-09-24 2 views
6

mein Skript funktioniert, aber ich verstehe nicht, wie es die Funktionen nicht starten, wenn in einem Textarea/Eingabe und diese Tasten gedrückt werden. aka: Startet das Ereignis, wenn der Benutzer diese Taste drückt, es sei denn, der Benutzer befindet sich in einer Textarea/Eingabe.jquery: Tun Sie dies auf Keyup, es sei denn, die Person ist in einem Textfeld oder Eingabe

$('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;  
} 
    }) 

Antwort

10

einfach überprüfen event.target:

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

In In diesem Fall haben Sie immer noch nur einen Event-Handler (der an den Body angehängt ist), filtert aber nach Elementen, die das Event empfangen.

+0

Warum sollte das Ereignis an erster Stelle der Eingabe zugewiesen werden, wenn Sie es nie behandeln wollen? – GenericTypeTea

+1

Hier ordnen wir das Ereignis dem Körper zu, nicht der Eingabe. Und später nur Filter mit Eingabe und Textarea .. Es ist viel besser dann zuweisen Ereignis für alle Elemente außer Eingaben – fantactuka

+1

+1 effizient getan – Thariama

1

Versuchen:

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

}); 
+1

Eine solche Auswahl ist falsch, da so viele Event-Handler hinzugefügt werden wie viele Elemente auf der Seite. – fantactuka

+0

fast richtig (Textareas sind nicht enthalten), aber das wird funktionieren – Thariama

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

oder

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

Dieser hat das gleiche Problem wie Thariamas Lösung – fantactuka

+0

das ist, was er verlangte. –

+0

Stellen Sie sich vor, diese Seite hat 10000 Elemente (nicht zu viel). Ordnen Sie jedem Element ein Ereignis zu? Es macht keinen Sinn – fantactuka

Verwandte Themen