2012-06-23 38 views
6

Tôi có một trang mà tôi cần chụp đầu vào từ người dùng sau khi họ nhấp vào một phần của trang (div). Dưới đây là mã của tôi:event.charCode luôn trả về 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> 

Nhìn thấy nó trong hành động: "có trọng tâm" http://jsfiddle.net/WRwBF/

Tôi đã mất nhiều thời gian nhất để có được điều này xa vì FireFox không theo mặc định cho phép một div để Cuối cùng tôi phát hiện ra rằng thiết lập các tabindex cho div cho phép nó được tập trung và sự kiện onkeydown hoạt động.

Vấn đề của tôi bây giờ là khi tôi bấm vào div và nhấn một phím, giá trị "0" được trả về bất kể phím nào được nhấn. Tại sao điều này lại xảy ra và tôi có thể sửa nó như thế nào?

Tôi rất cảm kích mọi hướng dẫn mà bạn có thể cung cấp!

+0

Phiên bản ngắn gọn là: [trình duyệt bị câm] (http://www.quirksmode.org/js/keys.html). Bài viết QuirksMode đó sẽ giải thích mọi thứ. Về cơ bản, để có được 'charCode' một cách hợp lý, bạn cần phát hiện sự kiện' keyPress' và thử 'evt.charCode || evt.keyCode' – millimoose

Trả lời

4

đọc http://unixpapa.com/js/key.html.

Tóm tắt: sử dụng sự kiện keypress là cách duy nhất để nhận thông tin đáng tin cậy về ký tự được nhập. Sau đây sẽ là tốt, đủ để giúp bạn có được ký tự gõ trong hầu hết các tình huống:

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

Sử dụng event.keyCode hoặc event.which (tùy thuộc vào trình duyệt) thay vì

+1

'event.keyCode' có thể không làm những gì bạn muốn nếu bạn muốn có thể phân biệt các chữ cái nhỏ và chữ in hoa. (Hoặc muốn bỏ qua các phím bổ trợ.) – millimoose

0

Bạn đã tập trung với các thuộc tính tabIndex, và bạn có thể tab để nó, nhưng không có giao diện cho một div nhận được một khoá biến cố.

Bạn nhận được thông tin từ đầu vào văn bản và chính cửa sổ.

+0

Không. Khi phần tử có thể nhận tiêu điểm, nó có thể kích hoạt các sự kiện quan trọng. http://jsfiddle.net/timdown/rLfF5/ –

Các vấn đề liên quan