Skąd wiesz, czy Caps Lock korzysta z JavaScript?
Jedno zastrzeżenie: zrobiłem to w Google, a najlepszym rozwiązaniem, jakie mogłem znaleźć, było dołączenie onkeypress
zdarzenia do każdego wpisu, a następnie sprawdzanie za każdym razem, czy naciśnięta litera jest pisana wielkimi literami, a jeśli tak, to sprawdź, czy shift również został przytrzymany. Jeśli tak nie było, to musi być włączony Caps Lock. To jest naprawdę brudne i po prostu ... marnotrawstwo - z pewnością istnieje lepszy sposób niż ten?
javascript
keyboard
capslock
pseudonim
źródło
źródło
input type=password
input type=email
Odpowiedzi:
Możesz spróbować. Dodano działający przykład. Gdy fokus jest ustawiony na wejściu, włączenie blokady Caps powoduje, że dioda LED zmienia kolor na czerwony, w przeciwnym razie zielony. (Nie testowałem na Macu / Linuksie)
UWAGA: Obie wersje działają dla mnie. Dzięki za konstruktywne uwagi w komentarzach.
STARE WERSJA: https://jsbin.com/mahenes/edit?js,output
Również tutaj jest zmodyfikowana wersja (czy ktoś może przetestować na Macu i potwierdzić)
NOWA WERSJA: https://jsbin.com/xiconuv/edit?js,output
NOWA WERSJA:
STARA WERSJA:
funkcja isCapslock (e) {
}
W przypadku znaków międzynarodowych można w razie potrzeby dodać dodatkowe sprawdzenie dla następujących kluczy. Musisz uzyskać zakres kodów dla interesujących Cię znaków, może być to za pomocą tablicy mapowania klawiszy, która przechowuje wszystkie prawidłowe klucze przypadków użycia, do których się adresujesz ...
wielkie litery AZ lub „Ę”, „Ö”, „Ü”, małe litery aZ lub 0-9 lub „ä”, „ö”, „ü”
Powyższe klucze są tylko przykładową reprezentacją.
źródło
W jQuery
Unikaj błędu, jak
s.toLowerCase() !== s
potrzebny jest klawisz Backspace .źródło
Możesz użyć a,
KeyboardEvent
aby wykryć wiele kluczy, w tym Caps Lock w najnowszych przeglądarkach.getModifierState
Funkcja zapewni stan na:To demo działa we wszystkich głównych przeglądarkach, w tym na urządzeniach mobilnych ( caniuse ).
źródło
Za pomocą polecenia „przechwytywanie naciśnięcia klawisza” w dokumencie można wykryć blokadę klawiszy za pomocą „wielkiej litery i żadnego naciśnięcia klawisza shift”. Ale lepiej upewnij się, że żaden inny moduł obsługi naciśnięć klawiszy nie wyskakuje z bąbla zdarzeń, zanim dotrze on do modułu obsługi w dokumencie.
Możesz wziąć to wydarzenie w fazie przechwytywania w przeglądarkach, które to obsługują, ale wydaje się to trochę bezcelowe, ponieważ nie będzie działać na wszystkich przeglądarkach.
Nie mogę wymyślić żadnego innego sposobu faktycznego wykrycia statusu Caps Lock. Sprawdzenie jest zresztą proste i jeśli wpisano niewykrywalne znaki, cóż ... wykrycie nie było konieczne.
W ubiegłym roku był artykuł o 24 sposobach . Całkiem dobrze, ale brakuje mu wsparcia dla postaci międzynarodowych (użyj,
toUpperCase()
aby obejść ten problem).źródło
Wiele istniejących odpowiedzi sprawdzi, czy klawisz Caps jest włączony, gdy klawisz Shift nie jest wciśnięty, ale nie sprawdzi go, jeśli naciśniesz Shift i dostaniesz małe litery, lub sprawdzi to, ale nie sprawdzi również, czy Caps Lock jest wyłączony, lub sprawdzi to, ale będzie traktować klucze inne niż alfa jako „wyłączone”. Oto zaadaptowane rozwiązanie jQuery, które wyświetli ostrzeżenie, jeśli klawisz alfa zostanie naciśnięty z klawiszami Cap (Shift lub No Shift), wyłączy ostrzeżenie, jeśli klawisz alfa zostanie naciśnięty bez Caps, ale nie wyłączy ostrzeżenia, gdy cyfry lub inne klawisze są wciśnięte.
źródło
W JQuery. Obejmuje to obsługę zdarzeń w Firefoksie i sprawdzi zarówno nieoczekiwane wielkie i małe litery. Zakłada to
<input id="password" type="password" name="whatever"/>
element i oddzielny element o id 'capsLockWarning
', który ma ostrzeżenie, które chcemy pokazać (ale jest ukryty inaczej).źródło
keypress
zdarzenia, aby użyć różnych obudów na wejściu, ponieważ obakeydown
ikeyup
zawsze zwracają wielkie litery . W związku z tym nie uruchomi się klawisz Capslock ... jeśli zamierzasz łączyć się ze.originalEvent.getModifierState('CapsLock')
Najważniejsze odpowiedzi tutaj nie działały dla mnie z kilku powodów (bez komentarza kod z martwym linkiem i niekompletnym rozwiązaniem). Spędziłem więc kilka godzin, próbując wyjść z domu i jak najlepiej: oto moje, w tym jQuery i nie-jQuery.
jQuery
Zauważ, że jQuery normalizuje obiekt zdarzenia, więc brakuje niektórych sprawdzeń. Zawęziłem go również do wszystkich pól haseł (ponieważ jest to największy powód, aby go potrzebować) i dodałem komunikat ostrzegawczy. Zostało to przetestowane w Chrome, Mozilli, Operze i IE6-8. Stabilny i wychwytuje wszystkie stany kapsla Z WYJĄTKIEM, gdy naciśnięte są cyfry lub spacje.
Bez jQuery
W niektórych innych rozwiązaniach bez jQuery brakowało awarii IE. @Zappa załatał to.
Uwaga: Sprawdź rozwiązania @Borgar, @Joe Liversedge i @Zappa oraz wtyczkę opracowaną przez @Pavel Azanov, której nie próbowałem, ale jest dobrym pomysłem. Jeśli ktoś zna sposób na rozszerzenie zakresu poza A-Za-z, prosimy o edycję. Również wersje tego pytania do jQuery są zamknięte jako duplikaty, dlatego zamieszczam oba tutaj.
źródło
Używamy
getModifierState
do sprawdzania Caps Lock, jest to tylko zdarzenie myszy lub klawiatury, więc nie możemy użyćonfocus
. Najczęstsze dwa sposoby na skupienie się na polu hasła to kliknięcie lub karta. Używamy,onclick
aby sprawdzić kliknięcie myszą w danych wejściowych i używamyonkeyup
do wykrycia karty z poprzedniego pola wejściowego. Jeśli pole hasła jest jedynym polem na stronie i jest automatycznie ustawiane, to zdarzenie nie nastąpi, dopóki pierwszy klucz nie zostanie zwolniony, co jest w porządku, ale nie jest idealne, naprawdę chcesz, aby wskazówki narzędzia Caps Lock były wyświetlane po uzyskaniu pola hasła skup się, ale w większości przypadków to rozwiązanie działa jak urok.HTML
JS
https://codepen.io/anon/pen/KxJwjq
źródło
event.getModifierState("CapsLock").
Wiem, że to stary temat, ale pomyślałem, że wrócę na wypadek, gdyby pomógł innym. Żadna z odpowiedzi na pytanie wydaje się nie działać w IE8. Znalazłem jednak ten kod, który działa w IE8. (Nie testowałem jeszcze niczego poniżej IE8). W razie potrzeby można to łatwo zmienić w jQuery.
Funkcja jest wywoływana przez zdarzenie onkeypress w następujący sposób:
źródło
Jest to rozwiązanie, które oprócz sprawdzania stanu podczas pisania przełącza również komunikat ostrzegawczy za każdym Caps Locknaciśnięciem klawisza (z pewnymi ograniczeniami).
Obsługuje również litery inne niż angielskie spoza zakresu AZ, ponieważ sprawdza znak ciągu przeciw
toUpperCase()
itoLowerCase()
zamiast sprawdzania względem zakresu znaków.Zauważ, że obserwowanie przełączania się na Caps Locka jest użyteczne tylko wtedy, gdy znamy stan Caps Locka przed Caps Locknaciśnięciem klawisza. Bieżący stan blokady wielkich liter jest utrzymywany za pomocą
caps
właściwości JavaScript elementu hasła. Jest to ustawiane przy pierwszym sprawdzeniu stanu Caps Lock, gdy użytkownik naciśnie literę, która może być wielka lub mała. Jeśli okno przestanie być aktywne, nie będziemy już mogli obserwować przełączania się na klawisz Caps, więc musimy zresetować do nieznanego stanu.źródło
Ostatnio na hashcode.com pojawiło się podobne pytanie i stworzyłem wtyczkę jQuery, aby sobie z tym poradzić. Obsługuje również rozpoznawanie Caps Lock na liczbach. (Na standardowym niemieckim układzie klawiatury blokada klawiszy ma wpływ na liczby).
Możesz sprawdzić najnowszą wersję tutaj: jquery.capsChecker
źródło
Do jQuery z twitterowym ładowaniem
Sprawdź, czy wielkie litery są zablokowane dla następujących znaków:
wielkie litery AZ lub „Ę”, „Ö”, „Ü”, „!”, ”„ ”,„ § ”,„ $ ”,„% ”,„ & ”,„ / ”,„ (”,„) ” , '=', ':', ';', '*', '' '
małe litery aZ lub 0-9 lub „ä”, „ö”, „ü”, „.”, „,”, „+”, „#”
demo na żywo na jsfiddle
źródło
Zmienna pokazująca stan Caps Lock:
działa na wszystkich przeglądarkach => canIUse
źródło
Ta odpowiedź oparta na jQuery opublikowana przez @ user110902 była dla mnie przydatna. Jednak poprawiłem go trochę, aby zapobiec usterce wspomnianej w komentarzu @B_N: nie udało się wykryć CapsLock podczas naciskania Shift:
W ten sposób będzie działać nawet po naciśnięciu klawisza Shift.
źródło
Ten kod wykrywa Caps Lock niezależnie od przypadku lub po naciśnięciu klawisza Shift:
źródło
Napisałem bibliotekę o nazwie capsLock, która robi dokładnie to, co chcesz.
Po prostu umieść go na swoich stronach internetowych:
Następnie użyj go w następujący sposób:
Zobacz demo: http://jsfiddle.net/3EXMd/
Status jest aktualizowany po naciśnięciu klawisza Caps Lock. Używa tylko klawisza Shift, aby określić poprawny status klawisza Caps Lock. Początkowo status to
false
. Więc uważaj.źródło
Jeszcze inna wersja, przejrzysta i prosta, obsługuje przesunięte czapki Lock, i nie jest ograniczona do ascii, myślę:
Edycja: Poczucie capsLockOn zostało odwrócone, doh, naprawione.
Edycja nr 2: Po sprawdzeniu tego jeszcze trochę, wprowadziłem kilka zmian, nieco bardziej szczegółowy kod, niestety, ale odpowiednio obsługuje więcej akcji.
Użycie e.charCode zamiast e.keyCode i sprawdzenie wartości 0 pomija wiele naciśnięć znaków innych niż znaki, bez kodowania czegokolwiek konkretnego dla danego języka lub zestawu znaków. Z mojego zrozumienia, jest nieco mniej kompatybilny, więc starsze, niemainstreamowe lub mobilne przeglądarki mogą nie zachowywać się tak, jak tego oczekuje kod, ale i tak warto, w mojej sytuacji.
Sprawdzanie na liście znanych kodów interpunkcyjnych zapobiega ich postrzeganiu jako fałszywych negatywów, ponieważ nie ma na nich wpływu Caps Lock. Bez tego wskaźnik Caps Lock zostaje ukryty po wpisaniu dowolnego z tych znaków interpunkcyjnych. Określając zestaw wykluczony, a nie dołączony, powinien być bardziej kompatybilny z rozszerzonymi znakami. Jest to najbrzydszy, szczególnie kasowy bit, i istnieje szansa, że języki inne niż zachodnie mają wystarczająco różne kody interpunkcyjne i / lub interpunkcyjne, aby stanowić problem, ale znowu warto IMO, przynajmniej w mojej sytuacji.
źródło
Reagować
źródło
Na podstawie odpowiedzi @joshuahedlund, ponieważ działało to dla mnie dobrze.
Uczyniłem kod funkcją, aby można go było ponownie użyć i w moim przypadku połączyłem go z ciałem. Można go połączyć z polem hasła tylko, jeśli wolisz.
źródło
Mottie za and Diego Vieira odpowiedź powyżej jest to, co skończyło się i powinna być akceptowana odpowiedź teraz. Jednak zanim to zauważyłem, napisałem tę małą funkcję javascript, która nie opiera się na kodach znaków ...
Następnie wywołaj go w takiej procedurze obsługi zdarzeń
capsLockIsOnKeyDown.capsLockIsOnKeyDown(event)
Ale znów skończyło się na tym, że użyliśmy odpowiedzi @Mottie si @Diego Vieira
źródło
W poniższym kodzie wyświetli się alert, gdy Caps Lock się włączy i naciśnie klawisz Shift.
jeśli zwrócimy fałsz; wówczas obecny znak nie będzie dołączany do strony tekstowej.
źródło
wypróbuj ten prosty kod w łatwy do zrozumienia
To jest skrypt
I HTML
źródło
spróbuj użyć tego kodu.
Powodzenia :)
źródło
Możesz użyć tego skryptu . Powinien działać dobrze w systemie Windows, nawet jeśli zostanie naciśnięty klawisz Shift, ale nie będzie działać w systemie Mac OS, jeśli tak jest.
źródło
Oto niestandardowa wtyczka jquery, wykorzystująca interfejs jquery, składająca się ze wszystkich dobrych pomysłów na tej stronie i wykorzystująca widżet podpowiedzi. Wiadomość Caps Lock jest automatycznie stosowana do wszystkich pól haseł i nie wymaga zmian w bieżącym pliku HTML.
Niestandardowy kod wtyczki ...
Zastosuj do wszystkich elementów hasła ...
źródło
Kod JavaScript
Teraz musimy powiązać ten skrypt za pomocą HTML
źródło
wiem, że jest późno, ale może to być pomocne dla kogoś innego.
oto moje najprostsze rozwiązanie (z tureckimi znakami);
źródło
Znalazłem więc tę stronę i nie podobały mi się znalezione rozwiązania, więc wymyśliłem jedno i oferuję je wszystkim. Dla mnie ważne jest tylko, czy włączona jest funkcja Caps Lock, jeśli piszę litery. Ten kod rozwiązał dla mnie problem. Jest szybki i łatwy i daje ci zmienną capsIsOn, do której możesz się odwoływać, gdy jej potrzebujesz.
źródło
Po wpisaniu, jeśli włączona jest funkcja caplock, może automatycznie przekonwertować bieżący znak na małe litery. W ten sposób nawet jeśli włączone są blokady, nie będzie się zachowywać tak, jak na bieżącej stronie. Aby poinformować użytkowników, możesz wyświetlić tekst informujący, że włączone są blokady, ale wpisy formularzy są konwertowane.
źródło
Istnieje znacznie prostsze rozwiązanie do wykrywania caps-lock:
źródło