Javascript-Event-Handler auf Körper, aber nicht auf Eingabe

7

Ich habe den folgenden Event-Handler

document.addEventListener('keydown', handleBodyKeyDown, false);

WIE verhindere ich das Auftreten in einer Eingabebox?

    
aWebDeveloper 29.08.2011, 13:44
quelle

8 Antworten

20

Überprüfen Sie innerhalb Ihrer handleBodyKeyDown -Funktion, ob

%Vor%

(oder 'TEXTAREA' ).

Hinweis: Verwenden Sie für ältere IE-Versionen event.srcElement.tagName .

Wie so:

%Vor%

P.S. Warum verwenden Sie addEventListener , wenn Sie jQuery auf der Seite haben? In jQuery wird all dies für Sie aussortiert:

%Vor%     
Joseph Silber 29.08.2011, 13:48
quelle
1

Überprüfen Sie in Ihrer handleBodyKeyDown -Methode, ob das Ereignis von einem input -Element herrührt:

%Vor%

Beachten Sie, dass der Aufruf toUpperCase erforderlich ist, weil die Bedingungen, die den Fall der Eigenschaft tagName bestimmen, ziemlich kompliziert und manchmal fast unkontrollierbar sind.

Siehe event.target bei MDN .

    
lonesomeday 29.08.2011 13:48
quelle
0

Sie könnten etwas tun wie:

%Vor%     
WTK 29.08.2011 13:49
quelle
0

Manchmal (wie mir) ist es besser, nicht zu verhindern, dass es auftritt, sondern in den Ereignisfällen zu ignorieren, wenn es in der Eingabe auftrat. Es sieht so aus, als ob das auch dein Fall ist.

Inspiziere einfach evt.target || evt.srcElement property (moderne Frameworks machen diese Normalisierung für dich, also höchstwahrscheinlich wird dies Ziel genannt) ob es Input ist oder nicht. Wenn nicht, einfach ignorieren.

    
shabunc 29.08.2011 13:49
quelle
0

QuirksMode zeigt Ihnen, wie Sie das Ziel eines Events erhalten. Sie können überprüfen, dass es sich nicht um eine Eingabe handelt:

%Vor%

Ihre Frage ist mit jQuery getaggt. In diesem Fall können Sie einfach event.target testen, da das Framework dies für Sie normalisiert.

%Vor%     
Dennis 29.08.2011 13:50
quelle
0

Wenn Sie jQuery verwenden, können Sie dies versuchen, indem Sie is() method verwenden, um das Zielelement zu testen, ist input , dann tun Sie nichts.

%Vor%     
ShankarSangoli 29.08.2011 14:04
quelle
0

Die Funktion "HandleBodyKeyDown" wird in jedem Fall aufgerufen. Sie können nicht verhindern, dass der Anruf bei der Aufzeichnungsmethode wie angegeben ausgeführt wird. Sie können nur eine Logik hinzufügen, um zu prüfen, ob dies eine 'Eingabe' ist und zurückgeben. Zusätzlich (falls erforderlich) können Sie verhindern, dass es aufbläht:

%Vor%     
Andrew D. 29.08.2011 14:22
quelle
0

Wenn Sie Prototype verwenden (den Sie getaggt haben, aber Sie haben auch zwei andere Frameworks markiert), dann kann das Event in einem solchen Fall registriert und gefiltert werden:

%Vor%     
clockworkgeek 29.08.2011 14:22
quelle

Tags und Links