Как определить, включена ли блокировка заглавных букв при использовании JavaScript?
Одно предостережение: я сделал это в Google, и лучшее решение, которое я смог найти, это прикрепить onkeypress
событие к каждому вводу, а затем проверять каждый раз, была ли нажата буква заглавной, и если это было, то проверять, была ли сдвиг также удерживаться. Если это не так, значит, заглушка должна быть включена. Это кажется действительно грязным и просто ... расточительным - наверняка есть лучший способ, чем этот?
javascript
keyboard
capslock
nickf
источник
источник
input type=password
input type=email
Ответы:
Вы можете попробовать. Добавил рабочий пример. Когда фокус на входе, включение заглавных букв заставляет светодиод становиться красным, иначе зеленым. (Не тестировался на Mac / Linux)
ПРИМЕЧАНИЕ: обе версии работают для меня. Спасибо за конструктивный вклад в комментарии.
Старая версия: https://jsbin.com/mahenes/edit?js,output
Также вот модифицированная версия (может кто-нибудь протестировать на mac и подтвердить)
НОВАЯ ВЕРСИЯ: https://jsbin.com/xiconuv/edit?js,output
НОВАЯ ВЕРСИЯ:
СТАРАЯ ВЕРСИЯ:
function isCapslock (e) {
}
Для международных символов может быть добавлена дополнительная проверка для следующих клавиш при необходимости. Вы должны получить диапазон кодов клавиш для интересующих вас символов, возможно, используя массив сопоставления клавиш, в котором будут храниться все действительные ключи прецедентов, к которым вы обращаетесь ...
прописные буквы AZ или 'Ä', 'Ö', 'Ü', строчные буквы aZ или 0-9 или 'ä', 'ö', 'ü'
Приведенные выше ключи являются просто примером представления.
источник
В jQuery,
Избегайте ошибок, таких как клавиша возврата назад
s.toLowerCase() !== s
.источник
Вы можете использовать
KeyboardEvent
для обнаружения многочисленных ключей, включая заглавные буквы в большинстве последних браузеров.getModifierState
Функция обеспечит состояние для:Эта демонстрация работает во всех основных браузерах, включая мобильные ( caniuse ).
источник
Вы можете обнаружить блокировку заглавными буквами, используя «верхний регистр букв и без сдвига», используя захват документа на документе. Но тогда вам лучше быть уверенным, что никакой другой обработчик нажатия клавиш не выдвинет всплывающее окно события до того, как оно попадет в обработчик документа.
Вы можете получить событие на этапе захвата в браузерах, которые его поддерживают, но это кажется несколько бессмысленным, поскольку оно не будет работать во всех браузерах.
Я не могу придумать какой-либо другой способ фактического определения статуса блокировки шапки. В любом случае проверка проста, и если были напечатаны не обнаруживаемые символы, ну ... тогда обнаружение не было необходимости.
В прошлом году была статья о 24 путях . Неплохо, но не хватает международной поддержки персонажей (используйте,
toUpperCase()
чтобы обойти это).источник
Многие существующие ответы будут проверять блокировку заглавных букв, когда Shift не нажата, но не будут проверять ее, если вы нажмете Shift и наберете строчные буквы, или проверите это, но также не проверит, отключена ли заглавная буква, или проверит это, но не-альфа-ключи будут считаться выключенными. Вот адаптированное решение jQuery, которое будет отображать предупреждение, если нажата буквенная клавиша с заглавными буквами (сдвиг или нет сдвига), отключит предупреждение, если нажата буквенная клавиша без заглавных букв, но не выключит или не включит предупреждение, когда цифры или другие клавиши нажаты.
источник
В JQuery. Это охватывает обработку событий в Firefox и проверяет наличие неожиданных прописных и строчных букв. Это предполагает наличие
<input id="password" type="password" name="whatever"/>
элемента и отдельного элемента с идентификатором 'capsLockWarning
', который имеет предупреждение, которое мы хотим показать (но скрыто в противном случае).источник
keypress
событие, чтобы использовать разные оболочки при вводе, потому что обаkeydown
иkeyup
всегда будут возвращать верхний регистр . Следовательно, это не сработает с ключом от кепки ... если вы намеревались объединиться сe.originalEvent.getModifierState('CapsLock')
Лучшие ответы здесь не работают для меня по нескольким причинам (некомментированный код с неработающей ссылкой и неполное решение). Так что я потратил несколько часов, пытаясь убедить всех и получить лучшее, что мог: вот мой, включая jQuery и non-jQuery.
JQuery
Обратите внимание, что jQuery нормализует объект события, поэтому некоторые проверки отсутствуют. Я также сузил его до всех полей пароля (так как это самая большая причина для этого) и добавил предупреждение. Это было проверено в Chrome, Mozilla, Opera и IE6-8. Стабильный и перехватывает все состояния колпачка, КРОМЕ, когда нажаты цифры или пробелы.
Без jQuery
В некоторых других jQuery-решениях не было запасных вариантов IE. @Zappa исправил это.
Примечание. Ознакомьтесь с решениями @Borgar, @Joe Liversedge и @Zappa, а также с плагином, разработанным @Pavel Azanov, который я не пробовал, но это хорошая идея. Если кто-то знает способ расширить область действия за пределы A-Za-z, отредактируйте его. Кроме того, jQuery-версии этого вопроса закрыты как дубликаты, поэтому я публикую оба здесь.
источник
Мы используем,
getModifierState
чтобы проверить наличие заглавных букв, это только член события мыши или клавиатуры, поэтому мы не можем использоватьonfocus
. Наиболее распространенные два способа получения поля пароля - щелчок мышью или вкладка. Мы используемonclick
для проверки на щелчок мыши внутри ввода, и мы используемonkeyup
для обнаружения вкладки из предыдущего поля ввода. Если поле пароля является единственным полем на странице и имеет автофокус, то событие не произойдет, пока не будет выпущен первый ключ, что нормально, но не идеально, вы действительно хотите, чтобы подсказки с заглавными буквами отображались после того, как поле пароля набирает силу фокус, но в большинстве случаев это решение работает как шарм.HTML
JS
https://codepen.io/anon/pen/KxJwjq
источник
event.getModifierState("CapsLock").
Я знаю, что это старая тема, но я подумал, что смогу дать ответ, если это поможет другим. Кажется, что ни один из ответов на вопрос не работает в IE8. Однако я нашел этот код, который работает в IE8. (Пока что не проверял ничего ниже IE8). Это может быть легко изменено для jQuery, если требуется.
И функция вызывается через событие onkeypress следующим образом:
источник
Это решение, которое, помимо проверки состояния при записи, также переключает предупреждающее сообщение каждый раз, когда Caps Lock нажатии клавиши (с некоторыми ограничениями).
Он также поддерживает неанглийские буквы вне диапазона AZ, поскольку он проверяет строковый символ против
toUpperCase()
иtoLowerCase()
вместо проверки по символьному диапазону.Обратите внимание, что наблюдение за переключением блокировки заглавных букв полезно только в том случае, если мы знаем состояние блокировки заглавных букв до Caps Lockнажатия клавиши. Текущее состояние блокировки caps сохраняется с помощью
caps
свойства JavaScript в элементе пароля. Это устанавливается в первый раз, когда мы проверяем состояние заглавных букв, когда пользователь нажимает букву, которая может быть в верхнем или нижнем регистре. Если окно теряет фокус, мы больше не можем наблюдать переключение блокировки шапки, поэтому нам нужно сбросить в неизвестное состояние.источник
Недавно был похожий вопрос на hashcode.com , и я создал плагин jQuery для решения этой проблемы. Также поддерживается распознавание заглавных букв на цифрах. (На стандартной немецкой раскладке клавиатуры заглавные буквы влияют на цифры).
Вы можете проверить последнюю версию здесь: jquery.capsChecker
источник
Для jQuery с загрузчиком Twitter
Проверьте заглавные буквы на следующие символы:
прописные буквы AZ или 'Ä', 'Ö', 'Ü', '!', '"', '§', '$', '%', '&', '/', '(', ')' знак равно
строчные буквы aZ или 0-9 или 'ä', 'ö', 'ü', '.', ',', '+', '#'
живое демо на jsfiddle
источник
Переменная, которая показывает состояние блокировки прописных букв:
работает во всех браузерах => canIUse
источник
Этот ответ на jQuery, отправленный @ user110902, был полезен для меня. Однако я немного улучшил его, чтобы предотвратить ошибку, упомянутую в комментарии @B_N: он не смог обнаружить CapsLock, пока вы нажимаете Shift:
Таким образом, он будет работать даже при нажатии Shift.
источник
Этот код обнаруживает блокировку заглавных букв независимо от случая или нажатия клавиши Shift:
источник
Я написал библиотеку с названием capsLock, которая делает именно то, что вы хотите.
Просто включите его на своих веб-страницах:
Затем используйте его следующим образом:
Смотрите демо: http://jsfiddle.net/3EXMd/
Состояние обновляется при нажатии клавиши Caps Lock. Он использует только взлом клавиши Shift для определения правильного состояния клавиши Caps Lock. Изначально статус есть
false
. Так что будьте осторожны.источник
Еще одна версия, понятная и простая, обрабатывает сдвинутые capsLock и не ограничивается ascii, я думаю:
Редактировать: смысл capsLockOn был полностью изменен, дох, исправлено.
Редактирование № 2: После проверки этого я внес несколько изменений, к сожалению, более подробный код, но он обрабатывает больше действий соответствующим образом.
Использование e.charCode вместо e.keyCode и проверка на 0 значений пропускает множество несимвольных нажатий клавиш, не кодируя ничего специфического для данного языка или кодировки. Насколько я понимаю, он немного менее совместим, поэтому старые, неосновные или мобильные браузеры могут вести себя не так, как ожидает этот код, но в любом случае это того стоит.
Проверка по списку известных кодов пунктуации не позволяет им рассматриваться как ложные отрицания, поскольку они не подвержены блокировке заглавными буквами. Без этого индикатор блокировки заглавных букв будет скрыт при вводе любого из этих знаков препинания. Указывая исключенный набор, а не включенный, он должен быть более совместимым с расширенными символами. Это самый уродливый, особенный случайный бит, и есть некоторый шанс, что незападные языки имеют достаточно разные знаки препинания и / или знаки препинания, чтобы быть проблемой, но опять же, это стоит IMO, по крайней мере, для моей ситуации.
источник
реагировать
источник
На основании ответа @joshuahedlund, так как он работал нормально для меня.
Я сделал код функцией, чтобы его можно было повторно использовать, и связал его с телом в моем случае. Он может быть связан с полем пароля, только если вы предпочитаете.
источник
Mottie в и Диего Виейра ответ выше того, что мы в конечном итоге использовала и должен быть общепринятый ответ прямо сейчас. Однако, прежде чем я заметил это, я написал эту маленькую функцию javascript, которая не использует коды символов ...
Затем вызовите его в обработчике событий, например, так
capsLockIsOnKeyDown.capsLockIsOnKeyDown(event)
Но опять же, мы в конечном итоге просто использовали ответ @Mottie s и @Diego Vieira
источник
В этом коде ниже будет показано предупреждение, когда заглавные буквы блокируются, и они нажимают клавишу, используя shift.
если мы вернем false; тогда текущий символ не будет добавлен к текстовой странице.
источник
попробуйте этот простой код в легко понять
Это сценарий
И HTML
источник
попробуйте использовать этот код.
Удачи :)
источник
Вы можете использовать этот скрипт . Он должен хорошо работать в Windows, даже если нажата клавиша Shift, но в Mac OS он не будет работать, если это так.
источник
Вот пользовательский плагин jquery, использующий jquery ui, который состоит из всех хороших идей на этой странице и использует виджет подсказки. Сообщение Caps Lock автоматически применяет все поля пароля и не требует никаких изменений в вашем текущем html.
Пользовательский плагин в коде ...
Применить ко всем элементам пароля ...
источник
Код JavaScript
Теперь нам нужно связать этот скрипт с помощью HTML
источник
я знаю, что уже поздно, но это может помочь кому-то еще.
так вот мое самое простое решение (с турецкими символами);
источник
Так что я нашел эту страницу, и мне не очень понравились решения, которые я нашел, поэтому я нашел ее и предлагаю ее всем вам. Для меня имеет значение только то, включена ли заглавная буква, если я печатаю буквы. Этот код решил проблему для меня. Это быстро и легко и дает вам переменную capsIsOn для ссылки, когда вам это нужно.
источник
Когда вы печатаете, если caplock включен, он может автоматически конвертировать текущий символ в нижний регистр. Таким образом, даже если включены блокировки, они не будут вести себя так, как на текущей странице. Чтобы проинформировать своих пользователей, вы можете отобразить текст о том, что каплоты включены, но записи формы преобразованы.
источник
Существует гораздо более простое решение для обнаружения caps-lock:
источник