Autor Zpráva
Suta
Profil
Událost keypress vrací ve vlastnosti charCode objektu event kód vepsaného znaku. Z něj dokážu odvodit konkrétní znak.

Události keydown / keyup vrací ve vlastnosti keyCode kód stisknuté klávesy.


Existuje způsob, jak se 100% jistotou zjistit, jaký znak by stisknutá klávesa při události keydown navázaná na document vepsala, byl-li by kurzor v textovém poli?

Uvedu příklad, který řeším.

1. Na obrazovce se objeví slovo.
2. Uprostřed slova chybí jedno písmeno.
3. Uživatel má stisknout klávesu (znak), který ve slovu chybí.
4. Událost document.keydown (či keyup) vrátí kód stisknuté klávesy.
5. V jiném národním prostředí s jinou klávesnicí by však klávesa se stejným kódem většinou vrátila jiný znak, takže tuto metodu nemůžu použít.

6. Lze toto nějakým způsobem obejít? Nebo budu muset zneviditelnit textové pole, kterému nastavím focus a po stisknutí klávesy zjistím přesný znak?
Suta
Profil
Napadlo mě otestovat chování události keypress u objektu document.

Ve všech mnou testovaných prohlížečích - IE (včetně např. IE verze 5.5 - v této verzi jsem testoval jen pro kontrolu), Opera, Firefox, Chrome tato událost funguje bez problémů. Nevím ale, zda-li někde neexistuje nějaká záludnost.

Mohl bych tedy toto řešení považovat za funkční napříč prohlížeči?

document.onkeypress = function(event) {
    // IE a Opera používá keyCode, ostatní charCode
    var charName = String.fromCharCode(event.charCode || event.keyCode);
}

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: