我有以上脚本, 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
个字母更改为另一个unicodes。意思是,每个字母都被转换成另一个字母,但问题是,有些字母只能用两个键击的组合一起或单独创建。即。
1,当您按m
然后快速按o
时,它应生成&#39; x&#39 ;;
2,或当您按shif + p
时,它应生成&#39; y&#39;
问题在于,代码每个笔划只识别一个字母。我尝试使用
if(text == 77+79){ // this is for m + o
text 'x';
}
或者甚至是应该输出shift
的{{1}} + p
我把上面的论点放在里面,但它没有用。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
if(text == 77 && text == 79){
text 'x';
}
答案 2 :(得分:0)
在这个示例中,有两个组合,如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>