Горячие клавиши jQuery: запретить IE запускать свои собственные ярлыки, например Alt + H

57
5

Используя горячие клавиши jQuery, я пытаюсь привязать ярлыки, такие как Alt + H , Alt + C к определенным действиям на моем сайте. Распространение событий останавливается (как и должно) во всех браузерах, кроме IE. Прежде всего, можно ли это достичь? Если да, то как?


Вот пример кода:


jQuery(document).bind('keydown', 'Alt+H',
function (event)
{
$this.toggleMenu( 'H' );
if(jQuery.browser.msie) {
event.cancelBubble = true;
}
else
{
event.stopPropagation();
}
return false;
} );

В IE выполняется строка $this.toggleMenu( 'H' );, но тогда cancelbubble кажется, не имеет никакого эффекта (браузер открывает свое меню "Справка" )

спросил(а) 2011-02-18T08:52:00+03:00 9 лет, 8 месяцев назад
1
Решение
58

Это всегда странно, что нужно пытаться (из-за встроенных горячих клавиш браузера и т.д.), но мне повезло с использованием события onKeyUp.


Проблема с keydown заключается в том, что он может отправлять только один ключ за раз. Поэтому, если вы нажмете ALT на один триггер keydown, а затем 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-х годов и требуют обширной поддержки клавиатуры, что вполне понятно, особенно когда они платят за это!)

ответил(а) 2013-04-12T02:02:00+04:00 7 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема