2012-06-23 111 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/ –