От много време не ми харесва как работя със key събития в javascript. Общо взето в по-голямата част от случаите съм писал нещо такова:
document.observe('keyup', function(e){
switch(e.keyCode || e.charCode){
case Event.KEY_UP: up(); break;
case Event.KEY_DOWN: down(); break;
case Event.KEY_RIGHT: right(); break;
case Event.KEY_LEFT: left(); break;
case Event.KEY_SPACE: fire(); break;
}
});
Което е меко казано досадно и затова реших да направя нещо по въпроса. Реших да използвам custom събитията на Prototype.js, на които ставам все по-голям фен в последно време. И така, взех нормалните key събития – keyup / keydown / keyup и към тях добавих натиснатия бутон. Като за сега се поддържат – backspace, tab, return, esc, left, up, right, down, delete, home, end, pageup, pagedown, insert. И така горния код става така:
document.observe('keyup:up', up);
document.observe('keyup:down', down);
document.observe('keyup:right', right);
document.observe('keyup:left', left);
document.observe('keyup:space', fire);
Кey custom събитията може да намерите тук. Ето и 2 малки демонстрации на това как работят – test1 и test2. Също така и в моя javascript playground в github ги има.
За момента само на Firefox и Safari съм ги пробвал, защото за тях ми трябваха. Но не виждам причина да не работят и под други браузъри.
Ако някои има идеи и предложения как това може да се подобри, ще се радвам да ги чуя
п.п. Докато работех с keypress, разбрах че имало проблем със keypress в Safari, за повече информация – http://ejohn.org/blog/keypress-in-safari-31/
