Beriem to, čo užívateľ napísal pomocou event.which na stlačenie klávesu a výstup pomocou String.fromCharCode.
Typy používateľov: a
event.which: 67
výstupy: A
Pre čísla a písmená, ktoré zvládnem, ale keď hovorím o špeciálnych znakoch, dostanem úplne odlišné výstupy.
Typy používateľov: -
event.which: 189
výstupy: ½
Po výskume som narazil na funkciu charCodeAta pomocou tohto výstupu výstup prichádza dokonale, dokonca aj špeciálne znaky.
Bohužiaľ nemôžem použiť znak charCodeAt, pretože používateľ zadáva priamo z dokumentu $ (dokument) a nie z poľa.
Otázkou teda je, či existuje spôsob, ako získať správny znak z udalosti keyPress.
Ak stále nedokážem zistiť moje pochybnosti, urobil som ťa husle =)
odpovede:
6 pre odpoveď č. 1Použi keypress
udalosť namiesto keyup
, Nahlasuje znakový kód namiesto kódov kľúčov a spúšťa sa pri písaní skutočných znakov, nie pri uvoľňovaní klávesu, takže spracováva aj opakované znaky.
$("#field").focus().keypress(function(e){
var key = e.which;
$("#key").val(String.fromCharCode(key));
});
http://jsfiddle.net/Guffa/QCHt7/1/
edit:
Ak chcete všade stlačiť stlačenia klávesov, môžetemusia pripojiť udalosť k dokumentu a tiež k akýmkoľvek prvkom, ktoré vyžadujú stlačenie klávesov. Napríklad textové pole spracuje klávesovú skratku a nevyvolá bublinu až k nadradenému prvku.
2 pre odpoveď č. 2
Používate keyup, udalosť, ktorá hlási, ktorý kláves bol stlačený a nie ktorý znak bol zadaný. Namiesto toho by ste mali používať stlačenie klávesu, napríklad:
$(document).keyup(function(e){
console.log(String.fromCharCode(e.which));
});
Všimnite si, že keydown a keyup poskytujú kódoznačujúce, ktorý kľúč je stlačené, zatiaľ čo stlačenie tlačidla označuje, ktorý znak bol zadaný. pre napríklad malé písmeno „a“ bude hlásené ako 65 pomocou klávesov downdown a keyup, ale ako 97 stlačenie klávesu. Všetci uvedú veľké písmeno „A“ ako 65 diania. Z tohto dôvodu pri chytení špeciálnych úhozov ako sú klávesy so šípkami, .keydown () alebo .keyup () je lepšou voľbou.