【问题标题】:Distinguish between = and + on keyUp区分 keyUp 上的 = 和 +
【发布时间】:2016-03-09 10:36:17
【问题描述】:

我正在尝试在 jQuery 中使用 keyUp 捕获字符代码。我试图在按下 = 号(不在数字键盘上)和 + 号(也不在数字键盘上)时同时捕捉。问题是,他们的字符键是两者。如果你正常按下它,你会得到=。如果你shift+按下它,那么你会得到+。我的代码是这样的:

(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
 // ........

那么当他们按下加号键时,我如何捕获(可能在这种情况下)?有什么优雅的方法吗?

【问题讨论】:

标签: jquery


【解决方案1】:

evt 有另一个你感兴趣的属性 - shiftKey,它是一个布尔值,表示按下了 shift 键。因此,您可以这样做:

$(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 =
       }
    }
});

【讨论】:

  • 但是你也需要处理AltGr,否则这会给'='带来误报
  • @A.Wolff 你能详细说明一下吗,我不确定我是否遵循。如果我按住 AltGr 并按 +/= 键,我都没有得到 - 这可能是你的意思吗?
  • azerty keyboard 上,按 AltGr+[187 键] 会给出 '}'。现在使用keyup 事件,您必须处理所有可能的键盘,根据keyCode 给出可能的不同字符。这就是为什么你应该使用 keypress 事件。在其他答案中,有这个发布的链接:stackoverflow.com/questions/11030532/…
【解决方案2】:

相反,您可以使用相同的keycode 并检查shiftkey 是否被按下:

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

【讨论】:

    【解决方案3】:

    您最好的选择是使用keypress 事件:

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

    event.which 已标准化

    【讨论】:

      【解决方案4】:

      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 而不是keyupkeycode 不同)。看一看
      $(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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多