Кроссбраузерная обработка нажатий клавиш
Привет.
Есть у кого то функция (или ссылка посмотреть) чтобы однозначно для всех браузеров можно было обработать и виртуальные коды клавиш и unicod символы? Например такого типа: function (what, event) { if (what == 'keypress') { // получаем код unicod символа по event.which или пусто если не символ return code; } if (what == 'keyup/keydown') { // получаем код виртуальной клавиши по event.keyCode и event.which return code; } } Думал в jQuery это решено, но смотрю там тоже есть путаница. Я понимаю, что можно и самому поперебирать, но замечаю что в той же опере от версии к версии меняются подходы, так что хотелось бы одну 100% правильную иметь где все уже учтено.:) |
В принципе при более подробном изучении все примерно нормально в jQuery - пару приколов в опере, и главное их не мешать - обработку символьных клавиш с управляющими ....
|
ну расскажи тогда уж, что накопал. Ты ж не сам с собой разговариваешь? ;)
|
Цитата:
Получается значит вот что: Исходные данные: 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. */ }); Вот, пока все.:) |
keypress для меня вообще тайна, покрытая мраком... Каждый браузер генерит событие по-разному... Уж лучше тогда обходиться связкой keydown/keyup, для которой нетрудно написать обёртку.
Насчёт Tab: событие keyup происходит уже не на том элементе, где был keydown, а там, куда попал фокус. В этой ситуации, после keydown нужно прикручивать blur. |
Цитата:
|
Я вообще в jQuery смотрел. Там многое уже наверное решено.
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
мне тут еще одно интересно. Например хочу организовать двойной ввод - то что ввожу в одном input сразу же появляется во втором.
Но, так: $('#inp1').keypress(function() { $('#inp2').val($(this).val()); }); содержимое копируется только с запозданием на текущий вводимый символ( в принципе это естественно, т.к. он еще не явл. "законной" частью значения поскольку можно в keypress отменить действие по умолчанию) Понятно что по blur считать можно последнее значение, но хотелось бы именно в цепочке нажатий где только keypress работает. Может кто-то что-то подскажет? |
Обновлять второй input с небольшой задержкой. А еще лучше по таймеру.
|
e.chrCode = e.charCode || e.which || e.keyCode; А там немного поэкпериментируйте и можно фильтровать где код символов а где системных. |
Часовой пояс GMT +3, время: 02:22. |