G0574's Archiver

弯月圆刀 发表于 2008-7-22 10:13

javascript 的 key event

键盘事件有三种类型:onkeydown,onkeypress,onkeyup

The event objects passed to keydown, keypress, and keyup event handlers are the same for each type of event, but the interpretation of certain properties of those objects depends on the event type. The event objects are browser-dependent, of course, with different properties in Firefox and IE.

If the Alt, Ctrl, or Shift keys are held down when a key is pressed, this is indicated by the state of the altKey, ctrlKey, and shiftKey properties of the event object. These properties are actually portable: they work in both Firefox and IE, and for all key event types. (One exception: Alt key combinations are considered nonprinting in IE, so they don't generate a keypress event.)

Getting the keycode or character code of a key event is less portable, however. Firefox defines two properties. keyCode holds the low-level virtual keycode of a key and is sent with the keydown event. charCode holds the encoding of the printable character generated by pressing that key and is sent with the keypress event. In Firefox, function keys generate a keypress event; in this case, charCode is zero, and the keyCode contains the virtual keycode.

In IE, there is only the keyCode property, and its interpretation depends on the type of event. For keydown events, keyCode is a virtual keycode; for keypress events, keyCode is a character code.

Character codes can be converted to characters with the static function String.fromCharCode( ). To process keycodes correctly, you must simply know which keys generate which keycodes. Example 17-6 at the end of this section includes a mapping of keycodes to the function keys they represent (on a standard U.S. keyboard layout, at least).

弯月圆刀 发表于 2008-7-22 10:15

[code]    // This is the keypress handler that filters the user's input
    function filter(event) {
        // Get the event object and character code in a portable way
        var e = event || window.event;         // Key event object
        var code = e.charCode || e.keyCode;    // What key was pressed

        // If this keystroke is a function key of any kind, do not filter it
        if (e.charCode == 0) return true;       // Function key (Firefox only)
        if (e.ctrlKey || e.altKey) return true; // Ctrl or Alt held down
        if (code < 32) return true;             // ASCII control character

        // Now look up information we need from this input element
        var allowed = this.getAttribute("allowed");     // Legal chars
        var messageElement = null;                      // Message to hide/show
        var messageid = this.getAttribute("messageid"); // Message id, if any
        if (messageid)  // If there is a message id, get the element
            messageElement = document.getElementById(messageid);

        // Convert the character code to a character
        var c = String.fromCharCode(code);

        // See if the character is in the set of allowed characters
        if (allowed.indexOf(c) != -1) {
            // If c is a legal character, hide the message, if any
            if (messageElement) messageElement.style.visibility = "hidden";
            return true; // And accept the character
        }
        else {
            // If c is not in the set of allowed characters, display message
            if (messageElement) messageElement.style.visibility = "visible";
            // And reject this keypress event
            if (e.preventDefault) e.preventDefault( );
            if (e.returnValue) e.returnValue = false;
            return false;
        }
    }
})( ); // Finish anonymous function and invoke it.
[/code]

弯月圆刀 发表于 2008-7-22 10:16

Key Pressed Javascript Key Code
backspace 8
tab 9
enter 13
shift 16
ctrl 17
alt 18
pause/break 19
caps lock 20
escape 27
page up 33
page down 34
end 35
home 36
left arrow 37
up arrow 38
right arrow 39
down arrow 40
insert 45
delete 46
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
a 65
b 66
c 67
d 68
e 69
f 70
g 71
h 72
i 73
j 74
k 75
l 76
m 77
n 78
o 79
p 80
q 81
r 82
s 83
t 84
u 85
v 86
w 87
x 88
y 89
z 90
left window key 91
right window key 92
select key 93
numpad 0 96
numpad 1 97
numpad 2 98
numpad 3 99
numpad 4 100
numpad 5 101
numpad 6 102
numpad 7 103
numpad 8 104
numpad 9 105
multiply 106
add 107
subtract 109
decimal point 110
divide 111
f1 112
f2 113
f3 114
f4 115
f5 116
f6 117
f7 118
f8 119
f9 120
f10 121
f11 122
f12 123
num lock 144
scroll lock 145
semi-colon 186
equal sign 187
comma 188
dash 189
period 190
forward slash 191
grave accent 192
open bracket 219
back slash 220
close braket 221
single quote 222

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.