Ich habe den folgenden Event-Handler
document.addEventListener('keydown', handleBodyKeyDown, false);
WIE verhindere ich das Auftreten in einer Eingabebox?
Überprüfen Sie innerhalb Ihrer handleBodyKeyDown
-Funktion, ob
(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:
Überprüfen Sie in Ihrer handleBodyKeyDown
-Methode, ob das Ereignis von einem input
-Element herrührt:
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 .
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.
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% 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.
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%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%Tags und Links javascript