2010-02-09 3 views
4

Как проверить, нажата ли комбинация клавиш с jquery?keydown комбинация

позволяет говорить о том, что я хочу запустить предупреждение только при одновременном нажатии клавиш со стрелками вверх и вниз.

прямо сейчас я просто с помощью:

switch (event.which) { 
    case 40: 
     alert('down'); 
     break; 
    case 38: 
     alert('up'); 
     break; 
    case 37: 
     alert('left'); 
     break; 
    case 39: 
     alert('right'); 
     break; 
} 

ответ

5

Установить флаги. Когда один ключ опускается, если это определенный ключевой код, установите свой флаг myKeyIsDown = true. Когда он появится, установите флаг в false. Когда ваш второй ключ опускается, если он имеет определенный ключевой код, и ваш флаг myKeyIsDown имеет значение true, у вас есть два ключа.

+0

умный способ обработки it..ill взглянуть на эту – ajsie

+1

Это может работать, но вам также нужно будет следить за событиями «keyup», чтобы очистить флаги. Кроме того, клавиатура отличается тем, что позволяет разрешить несколько клавиш. Конечно, они будут работать с такими вещами, как «shift» и «ctrl», но иногда другие клавиши этого не делают. Наконец, авто-повтор может вызвать интересные проблемы, потому что вы получите поток событий keydown/keyup, когда вы удерживаете обычный ключ, как если бы он был клавишей «shift». – Pointy

+1

работал как шарм – ajsie

2

Вы можете попробовать использовать плагин like this (demo)

+0

это плагин для секса – Natrium

+1

Это действительно потрясающий плагин, но я не уверен, что он позволит вам привязать одного обработчика только к комбинации «uparrow» и «downarrow». Комбинации, которые он понимает, кажутся «нормальными», такими как «shift» и «alt» и «ctrl» + что-то. – Pointy

+0

@Pointy, хорошая точка. – Natrium

1

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

/* handle special key press */ 
function checkCptKey(e) 
{ 
    var shouldBubble = true; 
    switch (e.keyCode) 
    { 
     // user pressed the Tab                                   
     case 9: 
      { 
       $(".someSelect").toggleClass("classSelectVisible"); 
       shouldBubble = false; 
       break; 
      }; 
      // user pressed the Enter  
     case 13: 
      { 
       $(".someSelect").toggleClass("classSelectVisible"); 
       break; 
      }; 
      // user pressed the ESC 
     case 27: 
      { 
       $(".someSelect").toggleClass("classSelectVisible"); 
       break; 
      }; 
    }; 
    /* this propogates the jQuery event if true */ 
    return shouldBubble; 
}; 

/* user pressed special keys while in Selector */ 
$(".mySelect").keydown(function(e) 
{ 
    return checkCptKey(e); 
}); 
+0

wow..i хочу дать вам 2 балла за это =) – ajsie

3

Я нашел это полезным: How to detect simultanious two key press from the Javascript ?. Это чистый javascript. Вы также можете изменить первый метод работы с event.which. И не флаги.

Fix: Для первого метода работы с вверх + вниз + R, вы должны использовать этот метод:

function KeyPress(e) { 
    for (i = 0; i < KPAry.length; i++) { 
     if (e == KPAry[i]) { 
      return; 
     } 
    } // for (i=0;i<KPAry.length;i++) 

    if (e != 17 && e != 18 && e != 82 && e!=38 && e!=40) { 
     KPAry = new Array(); 
    } else { 
     KPAry[KPAry.length] = e; 
    } 
    if (KPAry.length == 3) { 
     if (KPAry[0] == 17 && KPAry[1] == 18 && KPAry[2] == 82) { 
      alert('Keys Pressed\nctrl+alt+R '); 
     } else if (KPAry[0] == 38 && KPAry[1] == 40 && KPAry[2] == 82) { 
      alert('Keys Pressed\nup+down+R '); 
     } 
     KPAry = new Array(); 
    } // if (KPAry.length==3) 
} // function KeyPress(e) 
Смежные вопросы