2012-04-19 10 views
5

Znalazłem dziwne zachowanie zdarzenia jQuery click. Jeśli korzystamy z nawigacji po klawiaturze (przypadek dostępności), kliknięcie jest uruchamiane przez Enter lub spację (zależy to od tego, którego elementu HTML używamy).jQuery mouse's .click() jest uruchamiany przez nawigację klawiaturową

Jest stronę testową na jsfiddle, może próbować poruszać się za pomocą klawiatury w ramce rezultacie, a następnie kliknij przycisk zostanie uruchomiony w różnych sytuacjach:

http://jsfiddle.net/DCXhN/9/

W instrukcji jQuery, znalazłem następujący opis click zdarzenie:

"Zdarzenie click jest wysyłane do elementu, gdy wskaźnik myszy znajduje się nad elementem, a naciśnięcie i zwolnienie przycisku myszy może spowodować odebranie tego elementu."

Czy to normalne? Jak przechwycić tylko zdarzenia kliknięcia myszą, jeśli jest to normalne zachowanie?

+0

Tak, interakcja z klawiaturą, jak używanie karty do nawigacji, a następnie ENTER wywoła zdarzenie click ... ponieważ jest to skrót klawiaturowy do zachowania mousedown/mouseup dla kliknięcia – devnull69

+0

Wow. Jeśli ta logika jest zdefiniowana w jQuery lub na poziomie przeglądarki? –

+0

Wszystkie główne przeglądarki w systemie Windows robią to domyślnie w tym przykładzie (IE9, FF, Ch, Sa). Zmieniłem także obsługę zdarzeń z jQuery na zwykły javascript, a zachowanie jest takie samo, więc powinno być miarą przeglądarki. –

Odpowiedz

8

Tak, to jest normalne. Dokumentacja JQuery jest poprawna, ale nieco niekompletna. Nie ma więcej szczegółów na WC3 site the - np

Uwaga: W celu zapewnienia maksymalnej dostępności, autorzy treści są zachęcani do korzystania rodzaj zdarzenia kliknięcia przy określaniu zachowania aktywacyjny dla kontroli celnych, zamiast innych typów zdarzeń urządzenia wskazującego, takie jak mousedown lub mouseup, które są bardziej specyficzne dla urządzenia. Chociaż typ zdarzenia kliknięcia ma swoje początki w urządzeniach wskaźnikowych (np. Myszy), kolejne rozszerzenia implementacji rozszerzyły go poza to powiązanie i można go uznać za niezależny od urządzenia typ zdarzenia dla aktywacji elementu.

Lub, w inny sposób, dla niektórych elementów, kliknięcie() jest zasadniczo zdarzeniem logicznym, a nie zdarzeniem specyficznym dla urządzenia.

Jeśli naprawdę chcesz reagować tylko na dane wprowadzane myszą, możesz użyć zdarzeń mousedown/up - pamiętaj jednak, że musisz wtedy udostępnić swoją klawiaturę interfejsu osobno (np. Za pomocą zdarzeń typu keydown/press/etc aby zapewnić odpowiednik klawiatury).

Powiązane problemy