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

时间:2013-05-09 12:32:25

标签: javascript dom javascript-events event-handling

我正在尝试构建一个小脚本,在回调时显示,当我按下键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> 函数,但只按给定的时间执行函数。

2 个答案:

答案 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的实例。