2012-04-13 89 views
1

我知道我可以檢測單個退格按鍵這樣的:檢測的雙退格事件jQuery中

$("#myelement").bind ("keyup", function(event) { 
    if (event.keyCode==8) { 
     alert ("Backspaced!!!"); 
    } 
}); 

我怎麼會發現這種情況發生在1秒鐘內說,就像雙擊雙退格?

+2

跟蹤前一個關鍵代碼,並設置一個計時器,後一秒將其清除。 – 2012-04-13 14:14:02

回答

1

在jQuery.com本身,其custom.js文件中,是一些代碼,可能對你有所幫助。它在用戶擊鍵中偵聽「konami」代碼。如果它檢測到一個特定的按鍵序列,如下面的變量konami所示,它會作出響應。

// Hehe. 
if (window.addEventListener) { 
    var kkeys = [], konami = "38,38,40,40,37,39,37,39,66,65"; 
    window.addEventListener("keydown", function(e) { 
    kkeys.push(e.keyCode); 
    if (kkeys.toString().indexOf(konami) >= 0) 
     window.location = "http://ejohn.org/apps/hero/"; 
    }, true); 
} 

這段代碼沒有做的是跟蹤最後一次按鍵和當前按鍵之間的時間。但請注意,通過一些細微的修改,我們可以模擬他們的代碼並生成您想要的所需輸出。

<script> 
    (function($){ 
    // Prep our variables 
    var keys = [], lastEntry = 0, seq = '8,8'; 
    // Listen for keydown events 
    $(document).keydown(function(e){ 
     // Push new key into keys array 
     keys.push(e.which); 
     // See if we need to respond 
     if (keys.toString().indexOf(seq) != -1) 
     if (e.timeStamp - lastEntry <= 1000) 
      console.log('Correct keys, in the current time.'); 
     // Update time of last keydown 
     lastEntry = e.timeStamp; 
    }); 
    })(jQuery); 
</script> 
+1

您的方法不檢查它在兩次按鍵之間傳遞的時間。 – 2012-04-13 14:18:33

+0

@JanHančič查看最後一段:代碼示例即將到來。 – Sampson 2012-04-13 14:20:30

+0

我已經刪除了投票(當我投票贊成時,那個部分不在那裏):) – 2012-04-13 14:21:26

1

您將不得不跟蹤上次按下退格鍵的時間。然後每次你的事件處理程序被調用時,檢查該值,看看它是否小於1秒,如果它是你的雙重退格按下。如果不是,則將最後退格時間的值重置爲當前時間,並且不執行任何代碼。

在僞代碼:

last_timestamp = 0 
onkeyup() { 
    if key == backspace { 
    if now() - last_timestamp <= 1 { 
     // execute code 
     last_timestamp = 0 
    } 
    else { 
     last_timestamp = now() 
    } 
    } 
} 
0
var flag=false; 
$("#myelement").on("keyup", function(e) { 
    if ((e.keyCode ? e.keyCode : e.which) == 8) { 
     setTimeout(function() {flag=false}, 1000); 
     if (flag) { 
      flag=false; 
      alert('backspace twice'); 
     } 
     flag=true; 
    }else{ 
     flag=false; 
    } 
});​ 

FIDDLE