2012-06-23 110 views
6

我有一个页面,我需要在用户点击页面的一部分(div)后捕捉用户的输入。这里是我的代码:event.charCode总是返回0

<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”。为什么会发生这种情况,我该如何解决?

我非常感谢您能给予的任何指导!

+0

简短版本是:[浏览器是愚蠢的](http://www.quirksmode.org/js/keys.html)。那QuirksMode文章应该解释一切。基本上,为了便携地获取'charCode',你需要检测'keyPress'事件,并且尝试'evt.charCode || evt.keyCode' – millimoose

回答

4

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

摘要:使用keypress事件是获得有关输入字符的可靠信息的唯一方法。下面将是足以让你在大多数情况下,输入的字符:

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

使用event.keyCodeevent.which(取决于浏览器),而不是

+1

如果你想分开小写字母和大写字母,'event.keyCode'可能不会做你想做的事。 (或者想要忽略修饰键。) – millimoose

0

你得专注与tabIndex属性,并可以按Tab键,但没有任何接口,一个div接纳钥匙事件。

你从文本输入和窗口本身获得这些。

+0

否。一旦元素可以获得焦点,它可以触发关键事件。 http://jsfiddle.net/timdown/rLfF5/ –