javascript - 如何记录按键事件的时间?

标签 javascript dom event-handling dom-events

我正在尝试构建一个小脚本,在回调时显示,当我按 q 键时,一秒钟后我按 w 它应该显示 qw 显然,BUT 当我按下 qw 时,它们不一样时间,不到一秒,它应该显示其他单个字符,例如: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/

相关文章:

javascript - 无法在 Ionic 3 应用程序中导入 Amplitude SDK

java - 在 TextWatcher for Android 中控制事件的触发

javascript - 在鼠标悬停时删除 Vue 自定义过滤器

javascript - If 语句 - 电子邮件验证/检查

javascript - 相同的代码,但在不同的 View 中表现不同

javascript - 使用表单元素 - 复选框 - contenteditable div 内

javascript - 如何让用户输入文本来搜索数组对象,如果匹配则输出?请纯Javascript

javascript - jQuery checkerBoard 调整棋盘尺寸

javascript - DOM、原始 html 和页面上显示的内容之间有什么关系?

java - 在文件上写入 DOM 时 XMLNS 属性被删除