Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测Javascript中的按键序列。_Javascript_Dom_Javascript Events - Fatal编程技术网

检测Javascript中的按键序列。

检测Javascript中的按键序列。,javascript,dom,javascript-events,Javascript,Dom,Javascript Events,我有上面的脚本,或下面的脚本 <script type="text/javascript"> function check(e){ var text = e.keyCode ? e.keyCode : e.charCode; switch(text){ case 81: text = '&#4632;'; break; case 87:

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

<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>
甚至对于应输出
z
我把上面的论点放在里面,但它不起作用。

你试过这个吗?:

if(text == 77 && text == 79){
    text 'x';
}

听起来你想捕捉“异常”的按键组合。为此,我认为您需要捕获并记录
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;
}

在本例中,有两个键的组合,如ac和cd,但可以有3个或更多组合,如agk

<!DOCTYPE html>
<html>
 <head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title>Example</title>
<style type="text/css">
td{width:20px;height:20px;text-align: center;vertical-align: middle;}
</style>
<script type="text/javascript" src="jquery-1.9.0.js"></script>
</head>
 <body>

<input type="text" />

<script type="text/javascript">
//IE 8 and below doesn't have addEventLisener but all other majon browser have it
if(Element.prototype.addEventListener===undefined){
    Element.prototype.addEventListener=function(eventName,callback){
        var me=this;
        this.attachEvent("on"+eventName, function(){
            callback.call(me,window.event);
        });
    }
}
var myApp={
    multiChar:[
        [65,67],//ac
        [67,68] //cd
    ],
    prefChar:[0,0], //Index of mutichar match
    replacers:["مرحبا","وداعا"], //replace multichar matches (ac with مرحبا) 
    checkCode:function(e){
        var i=0,inp;
        //IE probably doesn't have shiftkey or implements it differently
        if(e.shiftKey){
          //check stuff with shift
          console.log("with shift",e.keyCode);
          //If a match found then reset prefChar
          prefChar=[0,0];
          return;
        }
        for(i=0;i<myApp.multiChar.length;i++){
            if(e.keyCode!==myApp.multiChar[i][myApp.prefChar[i]]){
                myApp.prefChar[i]=(e.keyCode===myApp.multiChar[i][0])?1:0
                continue
            }
            myApp.prefChar[i]++;
            if(myApp.prefChar[i]===myApp.multiChar[i].length){
                // found a multichar match
                console.log(myApp.replacers[i]);
                inp=document.body.getElementsByTagName("input")[0];
                inp.value=inp.value.substr(
                  0,inp.value.length-myApp.multiChar[i].length)+
                  myApp.replacers[i];
                myApp.prefChar[i]=0;
                return;
            }
        }
    }
}
document.body.getElementsByTagName("input")[0]
  .addEventListener("keyup",myApp.checkCode);
</script>


 </body>
</html>

例子
td{宽度:20px;高度:20px;文本对齐:中心;垂直对齐:中间;}
//IE8及以下版本没有addEventLisener,但所有其他majon浏览器都有
if(Element.prototype.addEventListener==未定义){
Element.prototype.addEventListener=函数(eventName,回调){
var me=这个;
this.attachEvent(“on”+eventName,function(){
callback.call(me、window.event);
});
}
}
var myApp={
多卡:[
[65,67],//ac
[67,68]//cd
],
prefChar:[0,0],//多字符匹配的索引
替换:替换多字符匹配(ac与多字符匹配)
检查代码:功能(e){
var i=0,inp;
//IE可能没有shiftkey或以不同的方式实现它
如果(如换档键){
//当班检查东西
console.log(“带shift”,例如keyCode);
//如果找到匹配项,则重置prefChar
prefChar=[0,0];
返回;
}

对于(i=0;i)尝试检测一系列按键(
m
按下并释放,然后
o
按下=>
x
)将不同于同时检测按键组合(
shift
+
p
)。这两个问题是非常不同的。后者似乎已经如@JDeveloper所指出的那样得到了回答;您应该分别问前者(可能也已经得到了回答).@kranzdot我会把一把小提琴放在一起……给我一分钟。@kranzdot快速提问——你需要能够检测序列和组合吗?或者,我最初的理解正确吗,77和79一起产生“x”?那将是非常棒的。是的,你是对的。但是,如果同时按下79,就不会77.别担心,我出去了一段时间。代码根本不起作用。我点击了键盘上的所有字母,但什么也没有显示。我没有同时按下两个键。只是一个接一个。因此,有一些时间问题。目前没有替换任何东西。只需控制台。记录检测。进行了更改对于aaac,ac部分也将被检测到。新的答案将替换它。使用regexp而不是此想法可能更容易谢谢你,但代码似乎非常复杂,你能告诉我一个帮助我记录按键的教程吗?它主要依赖于数组,multiChar包含数组数组,所以multiChar[0]包含2个值(a和c的字符代码或[65,67])。prefchar包含multiChar中子数组的索引,因此如果用户键入a,则prefchar为[1,0],因为charCode[0][0]中有匹配的键代码65。如果我下一步键入c,则它将匹配charCode[0][1](为67)。使用多维数组有点复杂,当您必须返回代码并进行更改时,总是很难在以后维护或更改,但它非常适合此特定问题。以下是javascript的良好参考:
<!DOCTYPE html>
<html>
 <head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title>Example</title>
<style type="text/css">
td{width:20px;height:20px;text-align: center;vertical-align: middle;}
</style>
<script type="text/javascript" src="jquery-1.9.0.js"></script>
</head>
 <body>

<input type="text" />

<script type="text/javascript">
//IE 8 and below doesn't have addEventLisener but all other majon browser have it
if(Element.prototype.addEventListener===undefined){
    Element.prototype.addEventListener=function(eventName,callback){
        var me=this;
        this.attachEvent("on"+eventName, function(){
            callback.call(me,window.event);
        });
    }
}
var myApp={
    multiChar:[
        [65,67],//ac
        [67,68] //cd
    ],
    prefChar:[0,0], //Index of mutichar match
    replacers:["مرحبا","وداعا"], //replace multichar matches (ac with مرحبا) 
    checkCode:function(e){
        var i=0,inp;
        //IE probably doesn't have shiftkey or implements it differently
        if(e.shiftKey){
          //check stuff with shift
          console.log("with shift",e.keyCode);
          //If a match found then reset prefChar
          prefChar=[0,0];
          return;
        }
        for(i=0;i<myApp.multiChar.length;i++){
            if(e.keyCode!==myApp.multiChar[i][myApp.prefChar[i]]){
                myApp.prefChar[i]=(e.keyCode===myApp.multiChar[i][0])?1:0
                continue
            }
            myApp.prefChar[i]++;
            if(myApp.prefChar[i]===myApp.multiChar[i].length){
                // found a multichar match
                console.log(myApp.replacers[i]);
                inp=document.body.getElementsByTagName("input")[0];
                inp.value=inp.value.substr(
                  0,inp.value.length-myApp.multiChar[i].length)+
                  myApp.replacers[i];
                myApp.prefChar[i]=0;
                return;
            }
        }
    }
}
document.body.getElementsByTagName("input")[0]
  .addEventListener("keyup",myApp.checkCode);
</script>


 </body>
</html>