2013-08-01 28 views
5

Próbuję uchwycić pewne zdarzenia kluczowe w mojej aplikacji, ale tylko wtedy, gdy nie zostały naciśnięte klawisze "control" w tym samym czasie. Nie chcę wpadać na problemy ze skrótami klawiszowymi czytnika ekranu. Shift, Ctrl i Alt są łatwe do sprawdzenia, ponieważ są one na razie JavaScript, ale również trzeba sprawdzić Ins i Windows kluczy, jak również wszelkie przyciski sterujące Mac.Jak sprawdzić, czy klawisz Insert został przytrzymany?

To jest to, co mam do tej pory i działa zgodnie z oczekiwaniami, ale moje zdarzenie jest nadal wyzwalane, gdy Ins lub Windows jest przytrzymany.

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(); 

    } 
} 

Czy istnieje sposób, aby sprawdzić, czy innych klawiszy sterujących łatwo czy trzeba uchwycić te wydarzenia i trzymać je w jakimś globalnym Boolean jak this.isInsertPressed?

Odpowiedz

3

Można zrobić coś takiego:

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

A potem:

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

Zastosowanie keycode nieruchomość w Event object

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

To będzie go złapać, kiedy to początkowo wciśnięty, ale nadal przytrzymany gdy 'event.keyCode === $ .ui.keyCode.HOME' i muszę nie pozwalają, aby cokolwiek zrobić. –

+0

Musisz również zachować ścieżkę zdarzenia keyup i sprawdzić, czy poprzedni klucz został zwolniony –

0

Zastosowanie event.key i nowoczesny JS!

Brak kodów numerycznych więcej. Możesz bezpośrednio otworzyć klucz Insert.

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