我有上面的脚本, CheckFiddle 或以下
<script type="text/javascript">
function check(e){
var text = e.keyCode ? e.keyCode : e.charCode;
switch(text){
case 81:
text = 'መ';
break;
case 87:
text = 'ሙ';
break;
case 69:
text = 'ሚ';
break;
case 82:
text = 'ማ';
break;
case 84:
text = 'ሜ';
break;
case 89:
text = 'ም';
break;
case 85:
text = 'ሞ';
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。意思是,每个字母都会转换为另一个字母,但问题是,有些字母只能通过组合两个击键来创建,可以一起使用,也可以单独使用。即
- 当你按下 m 然后快速按下 o 它应该生成 x;
- 或者当你按下 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/