event.charCode wordt altijd 0 geretourneerd

Ik heb een pagina waarop ik invoer van een gebruiker moet vastleggen nadat ze op een deel van de pagina klikken (een div). Hier is mijn code:

<html>
<body>
<div style="background-color: lightpink" onkeydown="onkeydown1(event)" tabindex="-1">
click me, then press a key
</div>

<script type="text/javascript">
function onkeydown1(event)
{
    alert(event.charCode);
}
</script>
</body>
</html>

See it in action: http://jsfiddle.net/WRwBF/

Het kostte me de langste tijd om zover te komen omdat FireFox standaard niet toestaat dat een div focus heeft. Uiteindelijk kwam ik erachter dat het instellen van de tabindex voor de div het mogelijk maakt om in focus te zijn en de onkeydown-gebeurtenis werkt.

Mijn probleem is nu dat wanneer ik in de div klik en op een toets druk, de waarde "0" wordt teruggegeven, ongeacht welke toets wordt ingedrukt. Waarom zou dit gebeuren en hoe kan ik dit oplossen?

Ik zou het zeer op prijs stellen als u enige begeleiding zou kunnen geven!

6
De korte versie is: browsers zijn dom . Dat QuirksMode-artikel zou alles moeten verklaren. Kortom, om de charCode draagbaar te krijgen, moet je de keyPress -gebeurtenis detecteren en proberen evt.charCode || evt.keyCode
toegevoegd de auteur millimoose, de bron

3 antwoord

Lees http://unixpapa.com/js/key.html .

Samenvatting: het gebruik van de keypress -gebeurtenis is de enige manier om betrouwbare informatie over het getypte karakter te krijgen. Het volgende is goed genoeg om je het personage te geven dat in de meeste situaties is getypt:

var charCode = (typeof event.which == "undefined") ? event.keyCode : event.which;
alert("Character typed: " + String.fromCharCode(charCode));
5
toegevoegd

U hebt focus met de tabindex-eigenschap en u kunt ernaar tabelen, maar er is geen interface voor een div om een ​​sleutelgebeurtenis te ontvangen.

Je krijgt die van tekstinvoer en het venster zelf.

0
toegevoegd
Nee. Zodra het element focus kan ontvangen, kan het belangrijke gebeurtenissen in brand steken. jsfiddle.net/timdown/rLfF5
toegevoegd de auteur Tim Down, de bron

Gebruik in plaats daarvan event.keyCode of event.which (afhankelijk van de browser)

0
toegevoegd
event.keyCode kan niet doen wat u wilt als u kleine letters en hoofdletters van elkaar wilt onderscheiden. (Of u wilt modificatietoetsen negeren.)
toegevoegd de auteur millimoose, de bron