Moderní tvorba webových aplikací

O webu

Ovládání webu klávesami v JavaScriptu

Odchytávání stisknutých kláves a vytváření klávesových zkratek v JavaScriptu.

5 minut

Ve webových aplikacích se občas hodí umožnit uživatelům některé funkce ovládat z klávesnice. Většinou by to neměl být jediný způsob, jak danou funkci použít, ale spíš usnadňující doplněk.

Odchytávání kláves

Zjišťovat, co uživatel stisk za klávesu, je většinou nejvhodnější přes document.onkeydown. Pro určení konkrétní klávesy se musí pro některé prohlížeče předat objekt event a sjednotit ho s window.event.

document.onkeydown = function(e) {
  var event = window.event || e;
  var kod = event.keyCode;
  alert(kod);
}

Kód poslední stisklé klávesy: (něco stiskněte)

Nyní stačí při požadovaném kódu provádět příslušnou akci.

Číselné kódy kláves

Často používané kódy kláves.

Kód Klávesa
27 Esc
37
39
38
40
116 F5
13 Enter
32 Space (mezerník)
8 Backspace
46 Delete
9 Tab

Klávesy Shift, Ctrl a Alt

Pro vytváření klávesových zkratek existují další speciální vlastnosti objektu event.

Kód Klávesa Vlastnost
16 Shift event.shiftKey
17 Ctrl event.metaKey || event.ctrlKey (sjednocení pro Mac OS)
18 Alt event.altKey

Pro odchytávání složených klávesových zkratek potom stačí něco jako:

if (event.keyCode == 83 && (event.metaKey || event.ctrlKey)) {
// Zkratka Ctrl + S
}

Tedy hlídat číslo klávesy a zároveň speciální klávesu.

Formulářová pole

Někdy je žádoucí, aby některé klávesové zkratky nefungovaly při psaní ve formuláři. Bylo by docela nepraktické, kdyby například ovládání fotogalerie šipkami blokovalo přesun kursoru v <input>u. Nebo při stisknutí klávesy S se provedla příslušná akce místo napsání znaku.

Řešení je zjišťovat cílový element. Opět se způsob liší napříč prohlížeči.

var target = event.srcElement || event.target;

Použití:

if (target.tagName == "INPUT") {
  // jsme v <input>u
}

Živá ukázka povolení zpracování zkratky Ctrl + S mimo formulářová políčka.

Přidávání více zkratek

Při používání více zkratek je vhodné vymyslet nějaký elegantnější postup. Třeba si vytvořit JS objekt se všemi zkratkami a jejich akcemi a ten předat funkci, která bude požadované funkce volat podle čísla klávesy.

var zkratky = {
  27 : function() {
    // ESC
  },
  37 : function() {
    // Left
  }
};
// Volání funkce při document.onkeydown
zkratky[kodKlavesy]();

Živá ukázka.

Odkazy jinam

Související články

Detekce otevření DevTools

Jak zjistit, že se na stránce otevřely vývojářské nástroje.

13 minut

JavaScript null a undefined

Rozdíly mezi null a undefined v JavaScriptu, kdy je používat a jak se vyhnout běžným chybám.

12 minut

Sleep v JavaScriptu

Jak implementovat sleep/delay funkcionalitu v JavaScriptu pomocí Promise a async/await

6 minut

JavaScript Battery API

Jak v JS zjistit stav baterie, co dnes funguje a kdy API nepoužívat.

3 minuty

Web jecas.cz píše Bohumil Jahoda, kontakt
Seznam všech článků
2013–2025