Jest to prawdopodobnie zamierzone zachowanie, a przynajmniej nie problem z jQuery/js, ale chciałbym wyjaśnienia, czy jest coś, co można by mieć.Zdarzenie keypress jQuery uruchamia się wielokrotnie po naciśnięciu klawisza - ale nie na wszystkich kluczach
podjąć następujące:
$(document).bind('keypress', function(e){
switch(e.keyCode)
{
case 37:
console.log('left cursor keydown, will fire on hold');
break;
case 39:
console.log('right cursor keydown, will fire on hold');
break;
case 80:
console.log('p will only fire once per press!');
break;
}
});
Można również grać na przykładzie w docs jQuery: http://api.jquery.com/keypress/
Kiedy lewy lub prawy kursor jest wciśnięty (lub wiele innych klawiszy, takich jak A,E,[,
itp), zdarzenie zostanie uruchomione, a na konsoli pojawi się niezły komunikat dziennika. Wszystko dobrze & zgodnie z przeznaczeniem. Teraz jednak spróbuj przytrzymać klawisz - po krótkiej przerwie zobaczysz, że zdarzenie keydown jest uruchamiane wielokrotnie po przytrzymaniu klawisza, jednak jeśli spróbujesz uderzyć w p
(lub, na przykład, j
), wystrzeli tylko pewnego razu.
Testuję to przy użyciu FF 9.0.1 i Mac OSX 10.7.1 i jQuery 1.7.1.
Czy jest to zgodne z projektem, czy jest to funkcja zależna od przeglądarki, czy ma to związek z systemem operacyjnym, a nawet z samą klawiaturą? Czy ktoś ma listę kluczy, które będą powtarzać, a klucze nie?
Jeśli chodzi o przypadek użycia, tak naprawdę nie ma tak naprawdę - po prostu pojawił się, gdy wiązałem animację do naciśnięcia kursora i zacząłem widzieć dziwne zachowanie po naciśnięciu klawisza. Moim obejściem było użycie zdarzenia keyup()
zamiast tego i preventDefault()
na zdarzeniu keydown()
dla kluczy, które były przedmiotem zainteresowania, aby zatrzymać przewijanie kursorów na ekranie. Wydaje się, że w zdarzeniu keypress keyCode zawsze jest 0
dla większości liter, co może mieć związek z tym, dlaczego myślałem, że przewodnik tylko raz wystrzelił. Po kilku dalszych testach widzę powtarzające się wpisy dziennika, jak na kursory. Jeśli zaznaczysz stronę jQuery API choć i używać demo na tym, że wykazuje zachowanie I opisywał: http://api.jquery.com/keypress/
nadal nie można wyjaśnić, że ja:/
Wszystkie klawisze powtórzyć. Musisz dodać 'break''s na końcu każdego przełącznika, chyba że celowo je pominąłeś. Albo twoja klawiatura źle działa, albo twój kod potrzebuje po prostu 'break'ów. –
Nie dla mnie - "p" powtarza się dobrze. Myślę, że jest to funkcja sprzętu/oprogramowania układowego twojej klawiatury. – Pointy
@BrianGraham zauważyłem to, dziękuję :) po przetestowaniu tego ponownie na jsfiddle widzę powtórzenie na wszystkich klawiszach też - jednak key key attr jest 0 na większości klawiszy dla zdarzenia keypress, co tłumaczyłoby niektóre dziwne zachowanie I widziałem – jammypeach