绕过键盘重复的方法?

时间:2014-09-23 22:58:43

标签: javascript html5

我正在编写一个程序,作为一种替代形式的身份验证使用击键节奏(非生物识别)。它记录用户推送keydown时以及何时释放时的按键时间。但是,当键被保持时(由于Javascript中onkeydown函数的性质),记录时间的函数在按住键的同时被一遍又一遍地调用。有没有办法避免这种麻烦? 重要代码下面,整个项目(IDK,如果有帮助):https://bitbucket.org/niklam/krauths-v.-1.0

<!DOCTYPE html>
    <html>
    <body>
        <h1> KRAUTHS Account Creator</h1>
        <link type="text/css" rel="stylesheet" href="style.css"/>
        <input id="a" onkeydown="start()" onkeyup="start()"> <br>
        <br>
        <br>
        <button onclick="submit()"> Submit</button>

        <script>
            var x = 0;
            var timer = 0;
            var list = ""

            function run(){
                timer = timer + 1;
                setTimeout(run, 1);
            }   

            function start(){
                x = x + 1;
                if(x==1){
                    run();
                }
                else{
                    list = list + timer +",";
                    timer = 0;
                }
            }

            function submit(){
                // ignore my http request, not important
                list = list.substring(0,list.length-1);
                alert(list);
                var request = new XMLHttpRequest();
                request.open("GET","../add?u="+prompt("Enter your username")+"&n="+list+"&l=m",false);
                request.onreadystatechange = function(){
                    if(request.status == 200 && request.readyState == 4){
                        alert(request.responseText);
                    }
                }
                request.send();
            }
        </script>
    </body>
</html>

2 个答案:

答案 0 :(得分:3)

直接的方式 - 在第一个keydown上设置一个标志并在keyup上取消设置,在设置时忽略输入。

答案 1 :(得分:0)

您可以在http://underscorejs.org/中使用_debounce功能。用户抬起钥匙后,只需按下最后一次按键。只需在您想要注册击键时设置延迟。还有其他功能可以应用于您,如油门。