2013-08-01 58 views
5

我想在應用程序中捕獲某些keydown事件,但前提是沒有同時按下「控制」鍵。我不想遇到屏幕閱讀器鍵盤快捷方式的問題。 Shift,CtrlAlt很容易檢查,因爲它們在javascript事件中,但我還需要檢查InsWindows密鑰以及任何Mac控制密鑰。如何判斷插入鍵是否被按下

這是迄今爲止我所得到的結果,它按預期工作,但我的事件仍然在觸發InsWindows時被觸發。

handleKeydown: function(event) { 
    var comboKeyPressed = event.ctrlKey || event.shiftKey || event.altKey; 
    if(!comboKeyPressed && event.keyCode === $.ui.keyCode.HOME) { 
    event.preventDefault(); 
    this.$('>ul>li:last').attr('tabindex', -1); 
    this.$('>ul>li:first').attr('tabindex', 0).focus(); 
    } else if (!comboKeyPressed && event.keyCode === $.ui.keyCode.END) { 
    event.preventDefault(); 
    this.$('>ul>li:first').attr('tabindex', -1); 
    this.$('>ul>li:last').attr('tabindex', 0).focus(); 

    } 
} 

有沒有一種方法可以輕鬆地檢查其他控制鍵或做我需要捕獲這些事件並緊緊抓住它們就像this.isInsertPressed一些全球性布爾?

回答

3

你可以做這樣的事情:

var keysPressed = {}; 
var keys = { insert: 45 };  
$(window).keydown(function(e) { keysPressed[e.which] = true; }); 
$(window).keyup(function(e) { keysPressed[e.which] = false; }); 

再後來:

if (keysPressed[keys.insert]) { 
    // insert key is currently down 
} 
1

使用鍵碼財產在Event object

if(event.keyCode === 45) // Insert Key 
+0

,將捕獲它時,它的最初按下,但它仍然保持下來的時候'event.keyCode === $ .ui.keyCode.HOME',我需要不允許它做任何事情。 –

+0

您還需要跟蹤keyup事件並檢查前一個密鑰是否已發佈 –

0

使用event.key和現代JS!

此產品數據來自此生產費用: any交付日期:你可以直接檢查插入鍵。

let isInsertDown = false; 
document.addEventListener("keydown", function (event) { 
    if (event.key === "Insert") { 
     isInsertDown = true; 
    } 
}); 
document.addEventListener("keyup", function (event) { 
    if (event.key === "Insert") { 
     isInsertDown = false; 
    } 
}); 

Mozilla Docs

Supported Browsers

相關問題