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
keydownandkeyupprovide a code indicating which key is pressed, whilekeypressindicates which character was entered. For example, a lowercase "a" will be reported as 65 bykeydownandkeyup, 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>