Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.12.2009, 17:15
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

Кроссбраузерная обработка нажатий клавиш
Привет.
Есть у кого то функция (или ссылка посмотреть) чтобы однозначно для всех браузеров можно было обработать и виртуальные коды клавиш и unicod символы?
Например такого типа:
function (what, event)
{
    if (what == 'keypress')
    {
        // получаем код unicod символа по event.which или пусто если не символ
        return code;
    }
if (what == 'keyup/keydown')
    {
        // получаем код виртуальной клавиши по event.keyCode и event.which
        return code;
    }
    
}

Думал в jQuery это решено, но смотрю там тоже есть путаница.
Я понимаю, что можно и самому поперебирать, но замечаю что в той же опере от версии к версии меняются подходы, так что хотелось бы одну 100% правильную иметь где все уже учтено.
Ответить с цитированием
  #2 (permalink)  
Старый 21.12.2009, 10:45
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

В принципе при более подробном изучении все примерно нормально в jQuery - пару приколов в опере, и главное их не мешать - обработку символьных клавиш с управляющими ....
Ответить с цитированием
  #3 (permalink)  
Старый 21.12.2009, 15:09
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

ну расскажи тогда уж, что накопал. Ты ж не сам с собой разговариваешь?
Ответить с цитированием
  #4 (permalink)  
Старый 21.12.2009, 16:14
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

Сообщение от x-yuri Посмотреть сообщение
ну расскажи тогда уж, что накопал. Ты ж не сам с собой разговариваешь?
Нет, с вами разговариваю.
Получается значит вот что:
Исходные данные:
1-ый случай - обрабатываем нажатие кнопок, соответствующих видимым символам (алфавитно-цифровые, ...)
$('...').keypress(function(e) {
/*
     e.which
держит unicod значение символа, управляющие кнопки обрабатывать тут не следует (из-за Chrome и не только )
*/
});

2-ой случай - обрабатываем нажатие управляющих кнопок (стрелки, backspace, esc ...)
$('...').keyup/keydown(function(e) {
/*
    e.keyCode
держит код нажатой виртуальной клавиши. Тут обрабатываем [B]только[/B] нажатие управляющих кнопок.
Тут есть тонкость в Опере: если нужно обрабатывать кнопку стрелка вниз(keyCode==40) или кнопку Tab(keyCode==9), 
то не надо это делать в keyup(событие не произойдет), а только в keydown.
*/
});

Вот, пока все.
Ответить с цитированием
  #5 (permalink)  
Старый 22.12.2009, 00:47
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

keypress для меня вообще тайна, покрытая мраком... Каждый браузер генерит событие по-разному... Уж лучше тогда обходиться связкой keydown/keyup, для которой нетрудно написать обёртку.

Насчёт Tab: событие keyup происходит уже не на том элементе, где был keydown, а там, куда попал фокус. В этой ситуации, после keydown нужно прикручивать blur.

Последний раз редактировалось B~Vladi, 22.12.2009 в 00:49.
Ответить с цитированием
  #6 (permalink)  
Старый 22.12.2009, 10:05
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от B~Vladi
Уж лучше тогда обходиться связкой keydown/keyup, для которой нетрудно написать обёртку.
Отличия у них существенные: keydown сообщает о нажатии клавиши, а keypress -- о вводе символа. Это в теории, на практике всё, разумеется, хуже.
Ответить с цитированием
  #7 (permalink)  
Старый 22.12.2009, 11:25
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

Я вообще в jQuery смотрел. Там многое уже наверное решено.
Сообщение от B~Vladi Посмотреть сообщение
keypress для меня вообще тайна, покрытая мраком... Каждый браузер генерит событие по-разному... Уж лучше тогда обходиться связкой keydown/keyup, для которой нетрудно написать обёртку.
keypress для описанных мной случаев везде нормально работает - и символы в верхнем регистре тоже ОК. А в keydown/keyup как определять что нажата shift - запоминать что-ли отдельно?

Сообщение от B~Vladi Посмотреть сообщение
Насчёт Tab: событие keyup происходит уже не на том элементе, где был keydown, а там, куда попал фокус. В этой ситуации, после keydown нужно прикручивать blur.
Это в опере только так, в остальных keyup сработает также на покидаемом элементе.
Ответить с цитированием
  #8 (permalink)  
Старый 22.12.2009, 11:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от micscr
А в keydown/keyup как определять что нажата shift - запоминать что-ли отдельно?
Про Caps не забываем
Ответить с цитированием
  #9 (permalink)  
Старый 22.12.2009, 11:40
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

Сообщение от Kolyaj Посмотреть сообщение
Про Caps не забываем
Да, забывать не надо . А в keypress все это уже решено.
Ответить с цитированием
  #10 (permalink)  
Старый 22.12.2009, 11:42
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от micscr
А в keypress все это уже решено.
Если нужна нажатая клавиша (горячие клавиши, например) -- ловим keydown, если нужен введённый символ (фильтрация ввода, например) -- ловим keypress.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка одновременно двух клавиш клавиатуры Destrifer Events/DOM/Window 8 20.12.2008 15:25