我正在尝试构建一个小脚本,在回调时显示,当我按下键q
然后在一秒后按w
它应显示q
和{{1显然,但是当我按w
然后q
不同时,仅在不到一秒的时间内,它应该显示ex的其他单个字符: w
这就是我目前遇到的问题 JsFIDDLE 或我的完整代码。
x
我是Javascript的新手,我迷失了什么让你录制一个按键然后等待听,如果还有一个存在甚至在一秒钟内。我也尝试了<script type="text/javascript">
function check(e){
var text = e.keyCode ? e.keyCode : e.charCode;
switch(text){
case 81:
text = 'q';
break;
case 87:
text = 'w';
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>
函数,但只按给定的时间执行函数。
答案 0 :(得分:1)
这里说:如果按了q,你得到一秒'w',否则你会得到'x'。这是你想要的吗? (试图让它尽可能容易阅读,最好你稍微重构一下:)
var openToW = false;
function check(e){
var text = e.keyCode ? e.keyCode : e.charCode;
if(text==81){
openToW=true;
document.getElementById("out").innerHTML='q';
setInterval(lock,1000);
}
if(text==87){
if(!openToW){
document.getElementById("out").innerHTML = 'x';
return;
}
else{
document.getElementById("out").innerHTML='w';
}
}
}
function lock(){
openToW=false;
}
答案 1 :(得分:1)
我认为这就是你所需要的:
var timer = new Date(),
previousChar;
function check (e) {
var foo,
text = e.keyCode ? e.keyCode : e.charCode,
out = document.getElementById('out'),
str = out.innerHTML;
switch (text) {
case 81: text = 'q'; break;
case 87: text = 'w'; break;
}
if (new Date() - timer < 1000 && text === 'w' && previousChar === 'q') {
text = 'x';
out.innerHTML = str.substring(0, str.length - 1);
}
if (text === 8) {
foo = str.substring(0, str.length - 1);
out.innerHTML = foo;
} else {
out.innerHTML += text;
}
previousChar = text;
timer = new Date();
return;
}
jsFiddle的现场演示。
修改强>
由于您已通过评论添加了更多要求,因此以下是该任务的已编辑代码:
var timer = new Date(),
keyCombinations = {
ae: 'ä',
oe: 'ö',
qw: 'x'
};
function check(e){
var text, str, previousKeys,
key = e.keyCode || e.charCode,
out = document.getElementById('out');
text = String.fromCharCode(key);
str = out.innerHTML + text;
previousKeys = str.substring(str.length - 2, str.length);
if (new Date() - timer < 1000) {
if (previousKeys in keyCombinations) {
str = str.substring(0, str.length - 2) + keyCombinations[previousKeys];
}
}
out.innerHTML = str;
timer = new Date();
return;
}
请注意,此代码适用于onkeypress
事件。从密钥代码创建字符时更可靠。您可以在onkeyup
处理函数中为特殊键分配单独的事件处理,例如 backspace 。
这不是一个完美的代码,但它可以让您了解如何实现此任务。它使用对象文字来存储所有组合键及其替换。这样你根本不需要编写任何循环。
jsFiddle的实例。