我知道我可以檢測單個退格按鍵這樣的:檢測的雙退格事件jQuery中
$("#myelement").bind ("keyup", function(event) {
if (event.keyCode==8) {
alert ("Backspaced!!!");
}
});
我怎麼會發現這種情況發生在1秒鐘內說,就像雙擊雙退格?
我知道我可以檢測單個退格按鍵這樣的:檢測的雙退格事件jQuery中
$("#myelement").bind ("keyup", function(event) {
if (event.keyCode==8) {
alert ("Backspaced!!!");
}
});
我怎麼會發現這種情況發生在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>
您的方法不檢查它在兩次按鍵之間傳遞的時間。 – 2012-04-13 14:18:33
@JanHančič查看最後一段:代碼示例即將到來。 – Sampson 2012-04-13 14:20:30
我已經刪除了投票(當我投票贊成時,那個部分不在那裏):) – 2012-04-13 14:21:26
您將不得不跟蹤上次按下退格鍵的時間。然後每次你的事件處理程序被調用時,檢查該值,看看它是否小於1秒,如果它是你的雙重退格按下。如果不是,則將最後退格時間的值重置爲當前時間,並且不執行任何代碼。
在僞代碼:
last_timestamp = 0
onkeyup() {
if key == backspace {
if now() - last_timestamp <= 1 {
// execute code
last_timestamp = 0
}
else {
last_timestamp = now()
}
}
}
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;
}
});
跟蹤前一個關鍵代碼,並設置一個計時器,後一秒將其清除。 – 2012-04-13 14:14:02