2012-04-17 5 views
31

Хорошо, а какая разница в .keypress и .keydown/.keyup? В настоящее время я использую .keydown, который возвращает значение .which значение 38 для моего ключа, теперь, если я изменю его на .keypress, он вернет значение 109 для этого же ключа. В чем разница и почему значения разные для одного и того же ключа?jQuery .keypress & .keydown. Which

+0

который вы используете? – Mathletics

+0

Различные браузеры должны приводить к разным событиям, но это не разные команды клавиш. – SpYk3HH

+0

У меня есть объект json со всеми ключевыми событиями, и каждый из них разделен на браузер, я также опубликую его слишком быстро, со всеми тремя нажатиями клавиш, и мы можем проверить это , gimmie like 10 mins – SpYk3HH

ответ

2

KeyPress происходит после KeyDown. Таким образом, вы можете использовать KeyDown, чтобы определить, какой именно ключ, затем KeyPress, чтобы запретить этот символ.

14

Вы должны прочитать следующее сообщение: http://javascript.info/tutorial/keyboard-events

KeyDown триггеры на любом нажатии клавиши и дает скан-код. Keypress триггеры после keydown и дает char-код, но он гарантирован только для символов.

20

Если вы нажмете кнопку, то она запустит keydown и выпустив ее, чтобы выстрелить keyup. Обычно между ними стоят keypress.

keydown и keyup говорить о том, какие ключ был изменен. keypress сообщает, что знак этот ключ представляет.

Обратите внимание, что это зависит от браузера!

См. this article about the differences between the key events as implemented on various browsers.

21

Я буду d $%^@ d, действительно есть разница с нажатием клавиши, и все это время я никогда не осознавал. лол

Смотрите мою скрипку и попробовать что-то вроде буквы "г"

http://jsfiddle.net/SpYk3/NePCm/

Как-то никогда я не обращал внимания на этот

Найдено подробнее:

http://www.quirksmode.org/js/keys.html

«Два свойства: keyCode и charCode. Положите (тоже) просто: keyCode что-то говорит о фактической клавише клавиатуры, которую нажал пользователь, а charCode дает значение ASCII результирующего символа. Эти биты информации не обязательно должны быть одинаковыми; например, нижний регистр «a» и верхний регистр «A» имеют одинаковый keyCode, поскольку пользователь нажимает тот же ключ, но другой charCode, потому что результирующий символ отличается.

Проводник и опера не поддержка charCode. Однако они дают информацию о символе в keyCode, но только с onkeypress. onkeydown и -upkeyCode содержит информацию о ключе."

+0

Да, поэтому я почему-то сомневаюсь, почему? – ChrisMJ

+0

, а jbl указал в своем ответе, [эта страница] (http://javascript.info/tutorial/keyboard-events) описывает проблему чуть-чуть, но она все еще не отвечает на весь вопрос , Возможно, я неправильно прочитал страницу, но в какой-то момент он все же указывает на то, что charcode потянут на обоих, просто один reutrns другое значение. Возможно, взгляд в каком-то старом js doc найдет ответ. Я смотрю сейчас, также собираюсь переписать свой объект, чтобы включить различия в клавиатуре – SpYk3HH

+0

, хотя я бы предложил избегать нажатия клавиш, поскольку он не срабатывает как предсказуемые события, такие как keydown и keyup – SpYk3HH

5

В обычных случаях идти на keyup:

$(document).keyup(function(e){ 
    console.log(e.which); 
}); 

Причина:

  1. keydown продолжает стрелять, когда пользователь держит ключи вниз, в то время как keypress и keyup огня только один раз
  2. .
  3. keypress не обнаруживает специальных ключей (например, SHIFT), keydown и keyup делаем.
Смежные вопросы