I wanted to employ keyboard short cuts to a frequently used internal web app used within the company- Pinch o’ the proverbial piss I thought- I’ll just use access keys! I’ve used them before on front facing sites for accessibility- but when I actually came to document these keys for the users I realised that support across different browsers is a mess;
IE Alt + {key}then hit return
Firefox Alt + Shift + {key}
Chrome Alt + {key} (the most sensible implementation, in my opinion)
IE also seems to refuse to aknowlege the links unless they are currently visible, and as the options I was short cutting existed in drop down menus this was no good, as they existing in bulleted lists which are “display:none” until the user mouses-over the menu bar (using my tiny drop down menu code)!
So to get around this I wrote some jQuery which standardises the short cuts- note this is no good for normal accessibility uses as it’s a new key combo which none of the browsers use, so without documentation no one will know- but for my use on an internal system it’s perfect.
I took the decision to make all the short cuts Ctrl+Alt+{key}, and wanted to keep using the accesskey attribute on my links rather than introduce another mechanism for dictating which keys triggered what- I also wanted to ensure if the link had a javascript onclick handler, instead of navigating away, we respect the handler and simply trigger that. Here’s the code;
$(document).keydown(function(e) {
if (e.ctrlKey && e.altKey && e.which >= 65 && e.which <= 122) {
e.preventDefault();
var key = String.fromCharCode(e.which);
var the_link = $("a[accesskey=" + key.toLowerCase() + "]");
if (typeof(the_link) != 'undefined') {
// does this link have a javascript assigned click handler, or do we simply send the user to the links href value?
var events = $.data( $(the_link).get(0), 'events' );
if (typeof(events) != 'undefined') {
if (typeof(events.click) != 'undefined') {
$(the_link).click();
return;
}
}
window.location = $(the_link).attr('href');
}
}
});











#1 by Gareth on March 1, 2012 - 11:35
Nice one! – Couldnt you write some config code so a user could decide which mapping to use? That would be alot more accessible for people who use a particular browser at home (Say Chrome) and want to use this browsers settings at work. Remember work environments only usually support IE, so giving a user the ability to use Chrome settings would be very accessible indeed!