3

我有上面的脚本,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。意思是,每个字母都被转换成另一个字母,但问题是,有些字母只能通过两个击键组合创建,一起或单独创建。IE

1,当你m快速按下then时,o它应该生成'x';2,或者当你按下shif + p它时,它应该生成'y'

问题在于,代码每笔只能识别一个字母。我尝试使用

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

甚至对于应该在内部输出上述参数的shift+ ,但它不起作用。pz

4

3 回答 3

3

听起来您想捕捉“异常”的按键组合。为此,我认为您需要捕获并记录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;
}
于 2013-05-09T02:54:26.353 回答
0

你试过这个吗?:

if(text == 77 && text == 79){
    text 'x';
}
于 2013-05-09T02:41:35.973 回答
0

在此示例中,有 2 个键的组合,如 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>
于 2013-05-09T03:23:06.190 回答