我正在编写一个程序,作为一种替代形式的身份验证使用击键节奏(非生物识别)。它记录用户推送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>
答案 0 :(得分:3)
直接的方式 - 在第一个keydown上设置一个标志并在keyup上取消设置,在设置时忽略输入。
答案 1 :(得分:0)
您可以在http://underscorejs.org/中使用_debounce功能。用户抬起钥匙后,只需按下最后一次按键。只需在您想要注册击键时设置延迟。还有其他功能可以应用于您,如油门。