2010-04-22 2 views
5

Я заметил проблему при попытке поймать комбинацию клавиш: CTRL + стрелка.Как обрабатывать Ctrl + стрелка в Javascript?

Я обработал событие keydown. Теперь, когда я держу CTRL ключ, тогда событие keydown запускается один раз. Если я держу стрелку (так что теперь я держу CTRL + стрелка), это не вызывает другого события. Это запрещено по какой-либо причине? Наверное, я уже сталкивался с этой проблемой в Opera несколько лет назад, и в браузере появилась опция.

Мои результаты:

  • холдинг CTRL, нажмите стрелку - Пожары событие для CTRL и не срабатывает событие для стрелы

  • пресс CTRL + стрелка сразу - срабатывает одно событие, но только с кодом ключа CTRL.

  • проведение CTRL, нажмите на букву (например, S.) - работает, как ожидалось

  • нажмите CTRL + буква (например, S.) - работает, как ожидалось

(Результаты идентичны в Chrome и Firefox. Является ли поведение, описанное выше стандартом?)

Я использую:

  • function OnKeyDown(e) { }
  • e.ctrlKey, e.which свойства события

Возникает вопрос: чем может быть проблема?

ответ

10

Вы должны проверить, если event.ctrlKey флаг, правда, что-то вроде этого:

document.getElementById('element').onkeydown = function (e) { 
    e = e || window.event; 
    var keyCode = e.keyCode || e.which, 
     arrow = {left: 37, up: 38, right: 39, down: 40 }; 

    if (e.ctrlKey) { 
    switch (keyCode) { 
     case arrow.left: 
     //... handle Ctrl-LeftArrow 
     break; 
     //... 
    } 
    } 
}; 

Проверить пример here.

+0

Я проверяю event.ctrlKey. Я написал это в своем вопросе. Я пробовал ваш код: http://pastebin.org/168399 - и это не сработает - может быть, что-то не так с моей клавиатурой. –

+0

Я отправил код в pastebin, потому что я не знаю, как еще ответить на ваш ответ с таким длинным кодом (комментарий слишком короткий, добавление кода в качестве ответа является грубым, добавление кода к вопросу является несистематическим). * CONFUSED * –

+0

Я играю [здесь] (http://jsbin.com/ojaki3) с кодом, который вы отправили, и он работает правильно, если * LeftArrow * (без Ctrl) нажата, то alets «gosh», если * Ctrl * - * LeftArrow *, предупреждения "heureka" ... – CMS