Это всегда странная вещь (из-за встроенных в браузер горячих клавиш и т. Д.), Но мне повезло с использованием события onKeyUp.
Проблема с отключением клавиатуры состоит в том, что она может толькоотправлять по одному ключу за раз.Так что, если вы нажмете ALT, это один из триггеров нажатия клавиш, а затем C - второй.KeyPress также имеет пробники в некоторых средах, потому что клавиши-модификаторы, такие как ALT и CTRL, не считаются нажатиями клавиш (я думаю ... кто-нибудь может объяснить это лучше?).
Если вы используете keyup, вы можете проверить, используется ли ALTудерживается при проверке ключа.Все еще отрабатывает изломы, но попробуйте это (я только проверял в win7: ie9 и chrome):
$(window).keyup(function (e)
{
// warning: only tested with EN-US keyboard / locale
// check whether ALT pressed (and not ALT+CTRL, ALT+SHIFT, etc)
var key = e.key || String.fromCharCode(e.keyCode);
if (e.altKey && !e.ctrlKey && !e.shiftKey && key)
{
// if ALT pressed, handle the keycode shortcut
var keyPressed = key.toUpperCase(); // normalize input
switch (keyPressed)
{
case "C":
// do stuff for ALT-C
break;
case "H":
// do stuff for ALT-H
break;
}
}
});
Проблемы / Вопросы:
- Использует jQuery, но чисто решение JSне слишком сложный
- Можно ли предотвратить поведение браузера по умолчанию, отменив событие?
- Будет ли оно работать в браузерах, отличных от Chrome и IE9?(вероятно, FF и Safari)
- Если пользователь отпускает клавишу ALT ДО отпускания буквенной клавиши, она не работает
- Если пользователь нажимает буквенную клавишу ПЕРЕД нажатием клавиши ALT, она не работает
- Попытка с использованием атрибутов ACCESSKEY, но это только устанавливает фокус. Я хотел щелкнуть гиперссылку и / или запустить событие click () для некоторого элемента на основе некоторой комбинации ALT-X.
- Хотя это можетбыть приемлемым для корпоративного веб-приложения (так как поддержка локали и браузера обычно является более узкой, а пользователи обычно обучаются работе с программным обеспечением), это может быть неприемлемо для веб-сайтов (из-за большого количества используемых браузеров проблемы локализации связаны с тем, чтодобавьте к сложности и т. д.) ... придется подумать об этом еще.
Надеюсь, это поможет кому-то ... не стесняйтесь вызывать конструктивную критику, так как это функция, которую клиенты ВСЕГДАспрашивать о том, когда я создаю их веб-приложений.(они привыкли к устаревшим приложениям на основе форм 80-х и 90-х годов и нуждаются в широкой поддержке клавиатуры, что понятно, особенно когда они за это платят!)