2
2

Можно узнать на сайте, включен ли Caps Lock или нет?

задан 30 Дек '12 12:24

изменен 30 Дек '12 18:37

%D0%A5%D1%8D%D1%88%D0%9A%D0%BE%D0%B4's gravatar image


6.9k730

@vv2cc: приведённый способ работает только для букв и только после нажатия клавиш. А капслок в некоторых раскладках на windows (например, в немецкой, если я не ошибаюсь) действует и на цифры.

(30 Дек '12 13:22) VladD

@VladD, "capitals lock" - "фиксация прописных букв". Ну ни в одной из раскладок с клавишей "Caps Lock" нет необходимости выполнять такого рода фиксацию для цифр - неудобно это. Была когда-то кнопка "Shift Lock", но это времена печатных машинок и логика у нее другая.

(31 Дек '12 0:02) Равнодушный

@Равнодушный: вы в самом деле пробовали немецкую раскладку на винде, или говорите из общих соображений?

(31 Дек '12 0:47) VladD
2

@Равнодушный, @Vlad. У меня немецкая раскладка клавиатуры, включенный caps lock действует на цифры. 1,2,3 = !"§

(31 Дек '12 1:21) Павел Азанов

@Vlad, у меня есть немецкая клавиатура раскладки "QWERTZ" от IBM. И на ней "Caps Lock" работает именно так, как и должен. А тот эффект, что Вы наблюдаете на некоторых вариантах раскладки от Microsoft - это как раз те самые раскладки с кнопкой "Shift Lock" от популярных для тех или иных стран печатных машинок, что, напомню, прошлый век.

(31 Дек '12 1:28) Равнодушный
2

@Равнодушный: работа капслока зависит, конечно, не от клавиатуры, а от ОС. Вы пробовали стандартную немецкую раскладку на винде или на другой ОС? Вот @Павел Азанов подтверждает мои опасения. То, что такое поведение -- наследие прошлого, конечно, интересная историческая подробность. Так и раскладка QWERTY/Z -- тоже наследие эпохи печатных машинок. Итак, возвращаясь к началу дискуссии: по факту действие капслока не обязательно ограничено буквами.

(31 Дек '12 1:42) VladD

Эх... Раскладку по умолчанию определяет драйвер клавиатуры. Драйверов с клавишей "Shift Lock" полно, а вот клавиатур с ней Вы у современных пользователей не найдете. Так что наличие раскладок, в которых "Caps Lock" включает режим "Shift Lock" - это просто старое ПО, и не стоит на это обращать внимание.

(31 Дек '12 4:46) Равнодушный

@Равнодушный: к сожалению, сложно заставить юзера не пользоваться родной раскладкой виндовой по умолчанию, даже если она плоха и нелогична. Наша цель ведь сделать юзеру комфортно, отталкиваясь от его настроек. Если юзер фактически пользуется Shift Lock вместо Caps Lock (из-за софта), надо жить и с этим.

(31 Дек '12 11:11) VladD
показано 5 из 9 показать еще 4
10|600 символов нужно символов осталось
1

Учитывая дискуссию в комментариях к вопросу, вот вариант, который определяет включен ли Caps Lock даже если нажата цифра (только в случае если Caps Lock имеет эффект!):

$('#txtTest').on('keydown', function(e) {
    $(this).data('_lastKey', e.which);
});
$('#txtTest').on('keypress', function(e) {

    var lastKey = +$(this).data('_lastKey');

    if(lastKey < 47 || lastKey > 90) return true;

    var letter    = String.fromCharCode(e.which);
    var upper     = letter.toUpperCase();
    var lower     = letter.toLowerCase();
    var isNumeric = lastKey >= 48 && lastKey <= 57;

    var caps = false;

    if(isNumeric)
        caps = (lastKey == e.which && e.shiftKey) || (lastKey != e.which && !e.shiftKey);
    else if( (letter === upper && !e.shiftKey) || (letter === lower && e.shiftKey) )
        caps = !isNumeric;

    //alert(caps);
});

Единственный выход это предварительно отлавливать событие keydown и сохранять нажатую клавишу.

Демо: http://jsfiddle.net/xH8vC/10/

Оформил как плагин к jQuery: jquery.capsChecker

ссылка

отвечен 31 Дек '12 3:51

изменен 1 Янв '13 23:21

Ну, ваш код ловит капслок на цифрах в немецкой раскладке, но не в английской. Хотя, возможно, это и хорошо: детектируется только потенциально проблемная ситуация.

+1.

(31 Дек '12 3:59) VladD

да, для варианта когда капс есть, но эффекта нет, думаю к сожалению нет решения. но это не так страшно.

(31 Дек '12 4:02) Павел Азанов

Ага, думаю, что проблема обычно именно в невидимом переключении символов при вводе, например, пароля. Если переключения нет, и проблемы нет.

(31 Дек '12 11:16) VladD
10|600 символов нужно символов осталось
1

Можно использовать JQuery.

$('#example').keypress(function(e) { 
    var s = String.fromCharCode( e.which );
    if ( s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey ) {
        alert('caps is on');
    }
});

Взял со StackOwerflow

Либо можете воспользоваться какой-нибудь уже написанной библиотекой. Вот например.

Ну и в добавление. Я не считаю возможным получить состояние капслока до того, как пользователь начнет вводить текст.

ссылка

отвечен 30 Дек '12 19:28

И ваш способ тоже работает только для букв. Кроме того, он не поймает капслок + шифт. Почему бы не использовать модуль на flash?

(30 Дек '12 23:36) VladD
1

Не могу понять почему flash так боятся, либо по неопытности, либо эффект биомассы, когда начал изучать эту тему (певерхностно) понравилось, что большинство проблем решаются очень просто. Слова в поддержку слов @VlaD =)

(31 Дек '12 4:35) GenchiK
10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

ХэшКод - это совместно редактируемый форум вопросов и ответов для начинающих и опытных программистов.

Присоединяйтесь!

отмечен:

×4,837

задан
30 Дек '12 12:24

показан
643 раза

обновлен
1 Янв '13 23:21

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Железный партнер
Рейтинг@Mail.ru