javascript - 在 JavaScript 中检测按键序列

标签 javascript dom dom-events

我有上面的脚本, CheckFiddle 或以下

<script type="text/javascript">
    function check(e){
        var text = e.keyCode ? e.keyCode : e.charCode;
                 
         switch(text){
         case 81:
            text = '&#4632;';
            break;
        case 87:
            text = '&#4633;';
            break;
        case 69:
            text = '&#4634;';
            break;
        case 82:
            text = '&#4635;';
            break;
        case 84:
            text = '&#4636;';
            break;
        case 89:
            text = '&#4637;';
            break;
        case 85:
            text = '&#4638;';
            break;
}
    
    if(text == 8){
        
        var str = document.getElementById("out").innerHTML;
        var foo = str.substring(0, str.length -1);
        document.getElementById("out").innerHTML = foo; 
    }else {
        document.getElementById("out").innerHTML += text;
    }

    }
    
</script>
<input  type='text'  onkeyup='check(event);' id='in' />
    
<div id='out' ></div>

这只会在输入时将一些 qwerty 字母更改为另一个 unicode。意思是,每个字母都会转换为另一个字母,但问题是,有些字母只能通过组合两个击键来创建,可以一起使用,也可以单独使用。即

  1. 当你按下 m 然后快速按下 o 它应该生成 x;
  2. 或者当你按下 shift + p 时,它应该生成 y

这里的问题是代码每次笔划只能识别一个字母。我尝试使用:

if(text == 77+79){  // this is for m + o
text 'x';
}

甚至对于 shift + p 应该输出 z。 我上面的参数在里面,但它不起作用。

最佳答案

听起来您想捕捉“异常”的组合键。为此,我认为您需要捕获并记录 keyup keydown

你想要一些这样的东西,但不一定是这样......

var keysdown = {};
var lastkey = 0;

element.onkeyup = function(evt) {
  var e = evt || window.event;
  keysdown[e.keyCode ? e.keyCode : e.charCode] = true;
}

element.onkeyup = function(evt) {
  var e = evt || window.event;
  var code = e.keyCode ? e.keyCode : e.charCode;
  keysdown[code] = false;
  switch (code) {
    // for cases wherein you need to detect keyA + keyB
    case 77:
      if (keysdown[79]) {
        // x
      } else {
        // m
      }
      break;
    // for cases wherein you need to detect sequence A, B
    case B:
       if (lastkey == A) {
         // do A,B
       } else {
         // do B
       }
       break;
  }
  lastkey = code;
}

关于javascript - 在 JavaScript 中检测按键序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453453/

相关文章:

javascript - oncontextmenu ="return false;"在 Opera 中不起作用?

javascript - React 问题 - @ 是一个意外的标记

javascript - 是否可以指示浏览器首先绘制页面的哪些元素?

javascript - 我可以让触摸事件通过一个层吗?

javascript - onmouseover 在 onmousemove 触发

javascript - 遍历 JQueryUI 选项卡控件中的每个选项卡并构建对象数组

javascript - 为什么内联 JS block 不安全?

javascript - 在 Javascript 中打印所有 ASCII 字符

javascript - 这个函数如何访问变量?

javascript - 使用 JavaScript 在 HTML 中动态创建 anchor 标记