2015-12-04 2 views
0

Я пытаюсь использовать коды символов, используя keyUp в jQuery. Я пытаюсь захватить как при знаке = (не на цифровой клавиатуре), так и в знаке + (также не на цифровой клавиатуре). Дело в том, что символьный ключ для них - оба. Если вы нажмете его нормально, вы получите =. Если вы сдвинете + нажмите, то получите +. Мой код выглядит следующим образом:Различать между = и + на keyUp

(document).keyup(function(evt) { 
    keyPressed = evt.keyCode ? evt.keyCode : evt.charCode; 

    switch (keyPressed) { 
     case 187: // perfectly captures the equal key pressed 
     case ???: // what should I put here 
// ........ 

Так как же я захвачу (возможно, в этом случае заявление), когда они ключ PLUS сдвиг нажата? Есть ли элегантный способ сделать это?

+0

попробовать это, чтобы захватить больше чем одна нажатая клавиша. http://stackoverflow.com/questions/4954403/can-jquery-keypress-detect-more-than-one-key-at-the-same-time –

ответ

2

evt имеет еще одно свойство интереса к вам - shiftKey, который представляет собой логическое значение, указывающее, что смена ключа была нажата , Таким образом, вы можете сделать это:

$(document).keyup(function(evt) { 
    keyPressed = evt.keyCode ? evt.keyCode : evt.charCode; 
    if(keyPressed == 187){ 
     if(evt.shiftKey){ 
      // is + as shift was also pressed 
     } 
     else{ 
      // is = 
     } 
    } 
}); 
+0

Но вам нужно обрабатывать 'AltGr' тоже, или это может дать false положительный для '=' –

+0

@ A.Wolff вы можете уточнить, я не уверен, что я следую. Если я держу 'AltGr' и нажимаю клавишу +/ =, я не получаю ни одного - это, возможно, то, что вы имеете в виду? – Jamiec

+0

На [azerty keyboard] (http://static.commentcamarche.net/ccm.net/faq/images/0-Vuskup12-azerty-s-.png) нажатие клавиши AltGr + [187] дает '}'. Теперь, используя событие 'keyup', вам придется иметь дело со всеми возможными клавишами, дающими возможный различный keyCode. Вот почему вы должны использовать событие 'keypress'. В другом ответе есть эта ссылка: http://stackoverflow.com/questions/11030532/keypress-and-keyup-why-is-the-keycode-different/11030750#11030750 –

0

Вместо этого вы можете использовать один и тот же keycode и проверить в случае, когда shiftkey нажата:

switch (keyPressed) { 
    case 187: 
     if(evt.shiftKey){ 
      console.log('+'); 
     }else{ 
      console.log('='); 
     } 
    break; 
} 
0

Там есть обработчик для keyup события называется shiftKey:

$(document).keyup(function(evt) { 
    keyPressed = evt.keyCode ? evt.keyCode : evt.which; 

    switch (keyPressed) { 
     case 187: 
      if (evt.shiftKey) 
       alert("+"); 
      else 
       alert("="); 
      break; 
    } 
}); 

См Fiddle


Или, в зависимости от того, что вы хотите сделать, вы можете попробовать используя keypress вместо keyup ( keycode - разные). Посмотрите

$(document).keypress(function(evt) { 
    keyPressed = evt.keyCode ? evt.keyCode : evt.which; 

    switch (keyPressed) { 
     case 61: 
      alert("="); 
      break; 
     case 43: 
      alert("+") 
      break; 
    } 
}); 

См Fiddle


также проверить - Difference between keyup and keypress

0

Лучше всего использовать keypress событие:

$(document).keypress(function (evt) { 
    var keyPressed = String.fromCharCode(evt.which); 
    console.log(keyPressed) 
}); 

event.which нормирована

Смежные вопросы