Удачное ли решение на сайте в поле пароля указывать, что нажат капслок, как на Маке? Нигде не встречал.
Артём Поликарпов
Хорошая идея. Кстати, в Сафари и Хроме на Маке так и есть, скриншот:
Я уверен, это особенность операционной системы, а не браузеров, несмотря на то, что в Опере и Файрфоксе под Маком такой индикации нет.
На Яваскрипте капслок определяется только косвенно, после нажатия клавиши. Напрямую никак. Вот мой вариант с Джейквери:
$(function () {
var mac = /^Mac/.test(navigator.platform),
$pass = $('#pass'),
$passHelp = $pass.next('.help');
$pass.keypress(function (e) {
// Нажатие клавиши в поле пароля
// Код символа
var code = e.which,
// Сам символ
symbol = String.fromCharCode(code),
// Нажат ли капслок?
capsLock =
// Да, если это верхний регистр,
symbol.toUpperCase() === symbol
// a не нижний (есть одинаковые
// в обоих регистрах символы),
&& symbol.toLowerCase() !== symbol
// и не нажат шифт на Винде
&& (!e.shiftKey || mac);
// Подсказка
$passHelp.text(capsLock ? 'Капслок?' : '');
});
});
Это был совет о разработке веб-интерфейсов. Хотите узнать
всё об умной вёрстке, правильных скриптах, грациозной деградации, трюках и работе технолога с дизайнером? Присылайте вопросы.
На Маке с зажатым шифтом буквы всегда в верхнем регистре независимо от капслока, и никаких выводов о его включённости сделать нельзя, поэтому условие такое.
Странно. Свои тач-устройства — Айфон, Айпад и планшет на Андроиде — я проверил, всё работает™. Но ясно, что такой косвенный метод не надёжен. Я уверен, что такая индикация в общем случае — забота операционной системы, а не разработчика. За всеми телефонами, планшетами, игровыми приставками и телевизорами не уследишь.