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 に変更します。つまり、各文字は別の文字に変換されますが、問題は、2 つのキーストロークを一緒にまたは別々に組み合わせてのみ作成できる文字がいくつかあることです。すなわち

m1、次にすばやく押すと、 o「x」が生成されます。2、またはそれを押すshif + pと、「y」が生成されます

ここでの問題は、コードが 1 ストロークにつき 1 文字しか認識しないことです。使ってみた

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 に答える