2014-10-07 61 views
1

我試圖做一個函數,其中如果鍵的特定順序按下那麼將導致一個重定向功能。我知道如何做1個字符,但不知道如何在一系列的字符之後重定向。到目前爲止,這是代碼:的JavaScript重定向序列功能

document.onkeydown= function(key){ reactKey(key); } 

function reactKey(evt) { 
    if (evt.keyCode == 73) { 
     if (evt.keyCode == 76) { 
     window.location = "http://www.google.com"; 
     } 
    } 
} 

    }); 

} 
$(document).ready(main); 

新的代碼:

document.onkeydown =函數(密鑰){reactKey(鍵); }

function reactKey(evt) { 
    if(evt.keyCode== 73) { 
    string key1 = 73; 
    }{ 
    if(evt.keyCode== 76) { 
    string key2 = 76; 
    }{ 
    if(key1 === 73 && key2 === 76) { 
     window.location = "http://www.google.com"; 
     } 
    } 
} 
} 
$(document).ready(main); 
+3

你不能在一個事件處理程序做兩個測試。您需要測試一次,存儲某種標誌,然後再次測試第二個鍵。對於較長的序列,你可能會考慮將最後一次按下X鍵的數組,然後,每按一次鍵,陣列要觸發重定向什麼比較。 – meagar 2014-10-07 07:44:39

+0

序列應該多快?印刷機之間的超時時間是什麼? – 2014-10-07 07:47:36

+0

不太確定如何存儲標誌。我更新了代碼,但它不起作用。 @BorisIvanov 的時間並不重要,我。 – michael874 2014-10-07 08:13:28

回答

0

由於@Amadan寫道,你必須最後兩個擊鍵存儲陣列,並與所需的序列進行比較。另外,@Boris Ivanov暗示,檢查按鍵之間的間隔會很好。

這裏是實現:

var INTERVAL = 500; // max. interval between two last key strokes 
var aKeys = []; // two last key strokes 
var laststroke = 0; // timestamp of last key stroke 
document.onkeydown = function(event){ 
    var t = (new Date()).getTime(); // current timestamp 
    aKeys.push(event.keyCode); 
    aKeys = aKeys.slice(0,2); // truncate aKeys array to 2 elements 
    // compare aKeys with needed sequence and check interval between key strokes 
    if (aKeys.join(',') == '73,76' && t - laststroke < INTERVAL) { 
     window.location = "http://www.google.com"; 
    } 
    laststroke = t; 
} 
+0

改用'Date.now()'。 – 2014-10-07 08:16:19

+0

如果有嵌入空格將它仍然工作,如果我說這個?: 功能removeSpaces(aKeys) – michael874 2014-10-07 08:31:11

+0

'aKeys'不能包含空格,因爲它的要素是'numbers' – hindmost 2014-10-07 08:33:39

0

在每個鍵盤事件上,將當前鍵碼或鍵字符添加到字符串或數組中。測試字符串/數組的結尾以獲得所需的輸入序列。要麼將字符串/序列截斷到某個限制,要麼在超時時清除它,以免失控。