хэш (#) против конечного charCode из события нажатия клавиши в Firefox - PullRequest
3 голосов
/ 21 декабря 2011

В Firefox (8) и клавиша 'end', и клавиша '#' имеют один и тот же charCode (35).Есть ли способ отличить их?

Я сделал короткую демонстрацию по jsfiddle.Просто введите в поле ввода, и он покажет вам charCode / клавишу, которую вы нажали.

http://jsfiddle.net/PfAeW/

Я строю текстовый редактор, где '#' запускает функцию автозаполнения,Мне нужно обслуживать иностранных пользователей (клавиатуры Великобритании), чтобы посмотреть, не будет ли нажата кнопка «shift».

Ответы [ 3 ]

1 голос
/ 22 декабря 2011

Существует два вида кодов для событий клавиш в DOM: charCode, который представляет символ для печатаемых клавиш, и keyCode, который представляет физическую клавишу, нажатую на клавиатуре.

Бывает, что charCode для '#' равен 35, а keyCode для конечного ключа также равен 35, но они идут с совершенно разными отображениями числа в значение.

Mootools выставляет .code для событий, которые связывают два кода, отсюда и путаница.

0 голосов
/ 22 декабря 2011

Вы можете проверять shift (event.code == 16) клавишу в событии нажатия клавиш и сохранять их значение, и когда срабатывает нажатие клавиши, вы уверены, что code из keydown событие было 16, а теперь 35 # действительно нажата. Если нет другого способа проверить, нажата ли клавиша Shift:)

0 голосов
/ 22 декабря 2011

Просто так что есть ответ ...

Похоже, что Mootools неправильно представляет нажатие клавиш (которые в вашем тесте также показывают неверные отображения следующего:

Key Pressed        How Moo Sees It
-----------        ---------------
end                #          35
.   (period)       delete     46
(   (left paren.)  down       40
'   (apos.)        right      39

Но вы можете использовать Keyboard (в сочетании со списком Keys ) и связываться с правильной последовательностью. Я не владею moo-tools, но получилв примерах документа я не вижу, почему следующее не будет работать:

var kb = new Keyboard({
    defaultEventType: 'keypress'
});
kb.addEvents({
    'end': fnEnd,
});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...