Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Разное поведение браузеров на события клавиатуры (https://javascript.ru/forum/offtopic/30987-raznoe-povedenie-brauzerov-na-sobytiya-klaviatury.html)

dmitry111 22.08.2012 19:35

Разное поведение браузеров на события клавиатуры
 
Заметил такую штуку:

при разной раскладке клавиатуры (en или rus) браузеры реагируют на нажатия клавиш букв по разному.

Так, браузеры firefox, opera при сигнале с кириллицы отказываются принимать событие. И keyCode этих клавиш равен 0 в firefox и четырехзначному значению в opera!

А браузеры safari, chrome одинаково реагируют на сигналы как кириллицей, так и латиницей.

Браузер ie не тестил.


Кто может это объяснить?

Deff 22.08.2012 19:38

dmitry111,
Может нун тестировать код буквы и на латинице и на кирилице при событии?

dmitry111 22.08.2012 19:47

Нужно, но только firefox при русской раскладке выдает 0 на любой клавише :)

dmitry111 22.08.2012 19:49

Буду признателен, если скажете как ведет себя ie в этой ситуации?

Deff 22.08.2012 19:51

dmitry111,
А при немецкой ? (Раскладки вродь в языковых настройках менять нужно) :write: (Интересно - насколь они рассово-дискриминируют

dmitry111 22.08.2012 19:57

не ну firefox явно самый рассовонетерпимый :yes:

Думаю логически правильный подход у opera, ну а с практической точки зрения webkit конечно же наиболее удобен. Вряд ли встретится такая клавиатура, на которой не будет энглиша.

dmitry111 22.08.2012 20:06

Сейчас проверил, firefox выдает ноль для стран бывших СССР. :)
А вот например Польша, Литва, Латвия приравнивается к латинице.

B~Vladi 22.08.2012 20:20

Скинь тестовый код.

dmitry111 22.08.2012 20:35

код как код
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>ууу</title>
    <script type="text/javascript">
        function xxx(e) {
            alert(e.keyCode);
        }
        window.addEventListener("keydown", xxx, false);

    </script>
</head>

<body>
</body>
</html>

Aetae 22.08.2012 21:47

Там целый геморой.
В некоторых случаях надо использовать e.charCode.
И это ещё не всё, в разных браузерах и в разных операционках по разному воспринимается зажатие клавиши. Например в ff на убунте - зажатая клавиша вызывает событие 1 раз при нажатии, а в ff windows - постоянно через короткий интервал. Про другие браузеры не помню, но там тоже полный разброд.)

nerv_ 22.08.2012 22:01

dmitry111, события клавиатуры

B~Vladi 22.08.2012 22:06

Цитата:

Сообщение от dmitry111
код как код

Выдаёт правильные значения. Скидывай версию сборки браузера, ОС, погоду за окном и свои религиозные предпочтения.

Gozar 22.08.2012 23:03

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>ууу</title>
</head>

<body>
    <script type="text/javascript">
        function xxx(e) {
            alert([e.charCode, e.which]);
        }
        document.addEventListener("keypress", xxx, false);
    </script>
</body>
</html>

dmitry111 22.08.2012 23:29

Цитата:

Сообщение от B~Vladi (Сообщение 199760)
Выдаёт правильные значения. Скидывай версию сборки браузера, ОС, погоду за окном и свои религиозные предпочтения.

Mac os, firefox 14.0.1

Кстати этаже проблема возникает также в самом первом примере тут:

http://learn.javascript.ru/keyboard-...n-%D0%B8-keyup

хотя, там об этом ничего не сказано!

dmitry111 22.08.2012 23:32

Gozar,

ваш код работает. Но речь о keydown и keyCode

dmitry111 22.08.2012 23:54

Думаю проблема в свойстве keyCode.
Если его использовать с событием keydown - выдает - 0 на кириллицу,
если с событием keypress - выдает 0 на кириллицу и латиницу

Gozar 23.08.2012 01:18

Цитата:

Сообщение от dmitry111
Но

Цитата:

Сообщение от dmitry111
проблема

Какая проблема?
Цитата:

Сообщение от dmitry111
код работает

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

ps: Можешь обращаться ко мне на ты.

ps2: Напиши свой браузер, в котором не будет проблем. ;)

dmitry111 23.08.2012 12:18

Gozar,

мне понравился keyCode своей универсальностью. Все равно какая буква - заглавная, строчная - код один и тотже.
Это же удобно и не заставляет лишний раз напрягать извилины ради пустяковых задач.

А charCode выдает разную цифру.

Из-за проблем в opera keyCode напоминает charCode, а из-за проблем в firefox (14.0.1 под os x) вообще теряет свою актуальность как свойство.

В коде написанном вами у меня не работают клавиши F1, F2, F3....
Так что он тоже не совершенен.


Вывод: чтобы приложение работало везде (при любой раскладке) и при этом не требовало дополнительных "региональных" костылей, безопасными клавишами, независимо от использования свойств charCode, keyCode, являются клавиши 0 - 9 на основной клавиатуре и больше никакие :)

Gozar 23.08.2012 15:19

dmitry111,
Не нужно придумывать проблему там где её нет.

Цитата:

Сообщение от dmitry111
В коде написанном вами у меня не работают клавиши F1, F2, F3....

И это очень хорошо. Руки нужно отрывать людям, которые пытаются на эти клавиши что-то повесить из скрипта страницы.

Цитата:

Сообщение от dmitry111
чтобы приложение работало везде

Это невозможно. Тому кто это не понимает ещё предстоит это понять.

Цитата:

Сообщение от dmitry111
Все равно какая буква - заглавная, строчная - код один и тотже.

दुनिया एक थोड़ा और अधिक से आपको लगता है कि ;)

antonM 23.08.2012 21:55

dmitry111, я тоже при разработке своего плагина столкнулся с этой проблемой (мне нужно было ограничить ввод с клавиатуры). Опера и ФФ под убунтой тоже выдают нули, нормально работает только Хром как в винде так и в убунте. Решил путем переделки условий в коде.

dmitry111 24.08.2012 00:51

хотя да, возможно Gozar прав. Эта не проблема.
Это типичная непродуманная хрень, которая в каждом браузере работает по разному. И делает код на чистом js чуть длиннее.

Чтобы понять как все это работает в разных браузерах мне потребовалось пару часов.. И проблемы действительно не стало

Примерно столько же времени мне потребовалось чтоб полностью освоить canvas!!!

Чувствуете разницу?

Вот такие вот пироги :-/

Gozar 24.08.2012 02:30

Цитата:

Сообщение от dmitry111
Вот такие вот пироги

Быть.

Aetae 24.08.2012 03:04

Хочу пирогов. =(

Hekumok 24.08.2012 11:01

Цитата:

Сообщение от Aetae (Сообщение 200166)
Хочу пирогов. =(

А тортик?)))

Aetae 24.08.2012 11:47

Цитата:

Сообщение от Hekumok (Сообщение 200189)
А тортик?)))

Тортик не хочу.
Хочу настоящих пирогов с мясом, как когда-то делала бабушка. =(

Oleg316 24.08.2012 12:29

Потестил я этот код - работает нормально и в Опере и в Firfox при включённой русской раскладке. Так что у Вас, наверно, клава глючит.

Hekumok 24.08.2012 14:00

Цитата:

Сообщение от Aetae (Сообщение 200200)
Тортик не хочу.
Хочу настоящих пирогов с мясом, как когда-то делала бабушка. =(

Хм...либо у меня память плохая, либо мне бабушка и правда никогда пироги с мясом не делала :blink:
Хотя это можно еще исправить)))


Часовой пояс GMT +3, время: 14:37.