2013-08-01 37 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

相关问题