2012-12-08 9 views
6

Zur Zeit habe ich Setup eine Funktion nach vorne und zurück zu gehen, wenn die linken und rechten Pfeiltasten auf den Seiten drücken mit diesem:keydown nur, wenn der Eingang nicht im Fokus ist

$(document).keydown(function (e) { 
    if ($(e.target).is('input')) { return false 
    } else if (e.keyCode == 37) { 
     $(".pageback").click(); 
     return false; 
    } 
    if (e.keyCode == 39) { 
     $(".pagenext").click(); 
     return false; 
    } 
}); 

Diese mit den Pfeiltasten erlaubt zu sein verwendet, um hin und her zu blättern, aber wenn ein Textfeld angetroffen wird, sind die Pfeiltasten noch aktiv.

Obwohl dies die Keydown-Funktionen stoppt, wenn das Textfeld scharf ist, lässt es auch überhaupt nicht zu, dass in den Eingabebereich getippt wird.

HILFE!

Dank

+0

Bitte schreiben Sie nicht, Ihren Code in einer Zeile, es ist zu schwierig zu folgen. – nnnnnn

Antwort

8

„es erlaubt auch gar nichts in den Eingabebereich eingegeben werden.“

Das Problem ist, dieser Teil:

if ($(e.target).is('input')) { return false 

Wenn Sie false von den Event-Handler zurückgeben verhindert es das Standardverhalten für das Ereignis.

Ändern Sie es in return true oder nur return (ohne Wert) und das Standardverhalten (in diesem Fall, Eingabe in das Feld) wird erlaubt.

. (Anmerkung: Sie auch für Textbereich Elemente mögen überprüfen, nicht nur Eingänge)

+0

super danke. Wäre es möglich, zwischen den Tastendrücken für die linke und rechte Taste auch eine kurze Verzögerung von 200 ms hinzuzufügen? –

+0

Entschuldigung, ich verstehe nicht, was Sie mit dem Hinzufügen einer Verzögerung meinen, es sei denn, Sie möchten mehr als eine Pfeiltaste innerhalb von 200 ms drücken? (Aber meiner Meinung nach wäre das eine andere Frage, und Sie sollten es selbst ausprobieren.) – nnnnnn

+0

Ich weiß, ich habe versucht, eine setTimeout-Funktion zu verwenden, weiß nur nicht, wo in diesem es hinzugefügt werden muss das ist alles. –

Verwandte Themen