2012-12-08 9 views
6

Obecnie mam ustawić funkcję, aby przejść do przodu i do tyłu po naciśnięciu klawiszy strzałek w lewo i prawo stron za pomocą tego:keyDown gdy wejście nie jest ostry

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

Pozwala to klawisze strzałek, aby być używany do przeglądania tam iz powrotem, ale po napotkaniu pola tekstowego klawisze strzałek są nadal aktywne.

Chociaż powoduje to zatrzymanie funkcji keydown, gdy pole tekstowe jest ostre, nie pozwala również na wpisanie niczego w polu wprowadzania.

POMOC!

Dzięki

+0

Proszę nie pisać kod w jednej linii, to jest zbyt trudne do naśladowania. – nnnnnn

Odpowiedz

8

„to także nie pozwalają niczego w ogóle być wpisane do obszaru wejściowego.”

Problemem jest to część:

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

Po powrocie false z obsługi zdarzeń uniemożliwia zachowanie domyślne dla zdarzenia.

Zmień na return true lub po prostu return (bez wartości), a domyślne zachowanie (w tym przypadku wpisanie w polu) będzie dozwolone.

. (Uwaga: można również sprawdzić dla elementów textarea, nie tylko wejść)

+0

niesamowite dzięki. Czy byłoby możliwe dodanie krótkiego, powiedzmy, 200 ms opóźnienia między naciśnięciami klawiszy dla lewego i prawego klawisza? –

+0

Niestety, nie rozumiem, co masz na myśli, dodając opóźnienie, chyba że masz na myśli, że chcesz zapobiec naciśnięciu więcej niż jednego klawisza ze strzałką w ciągu 200 ms? (Ale moim zdaniem byłoby to kolejne pytanie i powinieneś najpierw sam go wdrożyć.) – nnnnnn

+0

Wiem, próbowałem używać funkcji setTimeout, po prostu nie wiem gdzie w tym musi być dodany to wszystko. –