I\'m trying to set up a menu that can be navigated via the arrow keys. I have this working fin in Firefox.
Trying to get it to work in IE8 and after a bit of struggl
Try this:
$(document).keydown(function (e) {
if(!e) {
e = window.event;
}
switch(e.keyCode) {
case 37:
goLeft();
break;
case 39:
goRight();
break;
}
});
Use the 'keydown' event
Because I sometimes do not want events to bubble for some keys, I use something like: Customize the codes/keys as you see fit.
/* handle special key press */
function checkCptKey(e)
{
var shouldBubble = true;
switch (e.keyCode)
{
// user pressed the Tab
case 9:
{
$(".someSelect").toggleClass("classSelectVisible");
shouldBubble = false;
break;
};
// user pressed the Enter
case 13:
{
$(".someSelect").toggleClass("classSelectVisible");
break;
};
// user pressed the ESC
case 27:
{
$(".someSelect").toggleClass("classSelectVisible");
break;
};
};
/* this propogates the jQuery event if true */
return shouldBubble;
};
/* user pressed special keys while in Selector */
$(".mySelect").keydown(function(e)
{
return checkCptKey(e);
});
From the jQuery keypress documentation (the last paragraph of the introductory text):
Note that
keydown
andkeyup
provide a code indicating which key is pressed, whilekeypress
indicates which character was entered. For example, a lowercase "a" will be reported as 65 bykeydown
andkeyup
, but as 97 bykeypress
. An uppercase "A" is reported as 97 by all events. Because of this distinction, when catching special keystrokes such as arrow keys,.keydown()
or.keyup()
is a better choice.
It even literally mentions about the arrow keys ;) Thus, you really need to hook on either the keydown
or keyup
events. Here's an SSCCE with keydown
, just copy'n'paste'n'run it. No, you don't need to do a browser-compatible check on the event
, this works in all browsers from IE6 up to with Firefox.
<!doctype html>
<html lang="en">
<head>
<title>SO question 2217553</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(document).keydown(function(event) {
switch (event.keyCode) {
case 37: alert('left'); break;
case 38: alert('up'); break;
case 39: alert('right'); break;
case 40: alert('down'); break;
}
});
</script>
</head>
<body>
<p>Press one of the arrow keys.</p>
</body>
</html>