2014-09-23 183 views
1

我正在編寫一個程序,作爲認證的一種替代形式使用擊鍵節奏(非生物識別)。它記錄用戶按下按鍵時的按鍵時間,以及何時釋放按鍵的時間。但是,在保存密鑰的同時(由於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

除了調用自身的函數外,您可以在keydown上爲'time'設置一個變量,然後在keyup上從變量中減去當前時間值以獲得按鍵時間? – Jack 2014-09-23 23:07:24

回答

0

你可以在http://underscorejs.org/使用_debounce功能。只有在用戶提起鑰匙後纔會按最後一次按鍵。當你想註冊擊鍵時只需設置延遲。還有其他適用於您的功能,例如油門。

+0

我來這裏建議是一樣的 – renatoargh 2014-09-23 23:06:54

3

直線方式 - 在第一個keydown上設置一個標誌並在keyup上取消設置,在設置時忽略輸入。

+0

是的,我最終會這樣做,傻我認爲有一個更簡單的方法。 – user2707299 2014-09-23 23:09:51