我正在尝试构建一个小脚本,在回调时显示,当我按 q 键时,一秒钟后我按 w 它应该显示 q 和 w 显然,BUT 当我按下 q 和 w 时,它们不一样时间,不到一秒,它应该显示其他单个字符,例如:x,这就是我目前陷入困境的地方JsFIDDLE 或我的完整代码。
<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>
我是 JavaScript 新手,我不知道什么可以让你记录一个按键,然后等待监听是否存在另一个按键,甚至在一秒钟之内。我也尝试过 setInterval() 函数,但它仅按照给定的时间执行函数。
最佳答案
我认为这就是您所需要的:
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 。
关于javascript - 如何记录按键事件的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16461851/