event.charCode 始终返回 0

event.charCode always returning 0

提问人:Nate 提问时间:6/24/2012 更新时间:6/24/2012 访问量:8078

问:

我有一个页面,我需要在用户单击页面的一部分(div)后捕获用户的输入。这是我的代码:

<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>

查看实际操作:http://jsfiddle.net/WRwBF/

我花了最长的时间才走到这一步,因为 FireFox 默认不允许 div “有焦点”。最终我发现,为 div 设置 tabindex 可以让它成为焦点,并且 onkeydown 事件有效。

我现在的问题是,当我单击div并按下一个键时,无论按下哪个键,都会返回值“0”。为什么会发生这种情况,我该如何解决?

我非常感谢您能提供的任何指导!

JavaScript HTML

评论

0赞 millimoose 6/24/2012
简而言之是:浏览器是愚蠢的。那篇 QuirksMode 文章应该可以解释一切。基本上,要获得便携性,您需要检测事件,然后尝试charCodekeyPressevt.charCode || evt.keyCode

答:

1赞 Danilo Valente 6/24/2012 #1

改用 或(取决于浏览器)event.keyCodeevent.which

评论

2赞 millimoose 6/24/2012
event.keyCode如果您希望能够区分小写字母和大写字母,可能不会做您想要的。(或者想要忽略修饰键。
7赞 Tim Down 6/24/2012 #2

阅读 http://unixpapa.com/js/key.html

摘要:使用该事件是获取有关所键入字符的可靠信息的唯一方法。在大多数情况下,以下内容足以让您键入字符:keypress

var charCode = (typeof event.which == "undefined") ? event.keyCode : event.which;
alert("Character typed: " + String.fromCharCode(charCode));
0赞 kennebec 6/24/2012 #3

您可以通过 tabindex 属性获得焦点,并且可以按 Tab 键切换到它,但是没有 div 的接口来接收键事件。

您可以从文本输入和窗口本身获取这些内容。

评论

0赞 Tim Down 6/24/2012
不。一旦元素可以获得焦点,它就可以触发关键事件。jsfiddle.net/timdown/rLfF5