Запретить действие события по умолчанию не работает?

Я пытаюсь добавить на свой веб-сайт сочетания клавиш, чтобы сделать возможной быструю навигацию с помощью клавиатуры. Однако у меня возникла небольшая проблема с моей попыткой сочетания клавиш Alt + X. Событие проходит нормально и возвращает false, как и должно, но в любом случае появляется меню «Файл» браузера. Я также пробовал метод preventDefault, но без изменений.

Урезанная версия скрипта:

document.documentElement.onkeydown = function(e) {
    e = e || window.event;
    switch( e.keyCode || e.which) {
        // some cases here - most notably:
        case 116: // F5 key
            if( activeFrame) {
                activeFrame.contentWindow.location.reload();
                // reloads an iframe if one is active
                return false;
            }
            break;
        // more cases...
        case 88: // X key
            if( e.altKey) {
                // do something
                return false;
            }
    }
}

Как отмечалось выше, переопределение действия клавиши F5 по умолчанию работает нормально - браузер перезагружает страницу только в том случае, если ни один iframe не активен. Я не совсем понимаю, как предотвратить появление меню при нажатии Alt + X.


person Niet the Dark Absol    schedule 25.10.2011    source источник
comment
Я тестировал это в IE9, FF и Chrome. Только IE, похоже, имеет проблему. jsfiddle.net/rQKUn/5   -  person mrtsherman    schedule 25.10.2011
comment
Что ж, это хоть какое-то облегчение, но я надеюсь, что кто-нибудь придумает, как это исправить для IE ...   -  person Niet the Dark Absol    schedule 25.10.2011
comment
Эта проблема касается только alt+X или других ярлыков меню? Чтобы быстро определить keyCode, используйте: asquare.net/javascript/tests/KeyCode.html   -  person Rob W    schedule 30.10.2011
comment
Alt + X, Alt + C, Alt + V, Alt + Space, вы называете это.   -  person Niet the Dark Absol    schedule 30.10.2011


Ответы (3)


На самом деле у меня было веб-приложение, которое отлично работало с сочетаниями клавиш CTRL, но потом решил, что буду умен и буду использовать атрибут accesskey, и столкнулся с этой проблемой с IE.

Проблема с использованием сочетаний клавиш CTRL заключается в том, что многие из них являются более стандартными / полезными для многих приложений (например: вырезать, копировать, вставить, выбрать все).

Ctrl + Alt довольно безопасен, но требует от пользователя большей работы.

Я стараюсь просто придерживаться сочетаний клавиш ALT. IE упорно не настаивает на обработке.

Демонстрация успешной отмены CTRL + A / CTRL + F: http://jsfiddle.net/egJyT/

Этот ответ, похоже, подразумевает, что невозможно отключить ярлыки меню, не переведя IE в режим киоска.

person Kevin Stricker    schedule 30.10.2011
comment
Ctrl + Alt - это то, что я использую сейчас, похоже, все хорошо. Если ни у кого нет возможности занять первое место в меню, это, вероятно, будет лучшим ответом. - person Niet the Dark Absol; 30.10.2011
comment
@RobW Мне не удалось заставить работать ни один из документированных методов, что подтверждает мой предыдущий опыт. Я обращался к комментариям о щедрости. Это похоже на полуофициальное «нет», это невозможно. answers.microsoft.com/en-us/ie/forum/ie8-windows_other/ - person Kevin Stricker; 30.10.2011
comment
@Kolink Я бы выбрал комбинацию Shift + ctrl или Shift + Alt. Ctrl + alt + ... - это часто используемая комбинация горячих клавиш, которая может мешать ожидаемому поведению пользователя. - person Rob W; 30.10.2011

используйте stopPropagation(e); вместо preventDefault метода

function stopPropagation(e)
{
    e = e || event;/* get IE event ( not passed ) */
    e.stopPropagation? e.stopPropagation() : e.cancelBubble = true;
}

Ссылка для справки

Другой вопрос SO, в котором упоминается, что preventDefault имеет проблему в IE.

ОБНОВИТЬ

Попробуйте использовать приведенный ниже код согласно Справочнику MSDN

event.returnValue=false;

И еще кое-что из Обнаружение нажатий клавиш

Некоторые общие предостережения:

  • Как правило, Mac менее надежен, чем Windows, и некоторые ключи не могут быть обнаружены.
  • Explorer не запускает событие нажатия клавиши для удаления, завершения, ввода, выхода, функциональных клавиш, домашней страницы, вставки, pageUp / Down и табуляции.
  • Onkeypress, Safari дает странные значения keyCode в диапазоне 63200 для удаления, завершения, функциональных клавиш, домашней страницы и pageUp.Down. Значения onkeydown и -up нормальные.
  • Alt, Cmd, Ctrl и Shift не могут быть обнаружены на Mac, кроме Opera. Однако вы всегда можете использовать свойства altKey, ctrlKey и shiftKey.
person Harsh Baid    schedule 30.10.2011
comment
Я думаю, что использование ALT в качестве сочетания клавиш (комбинации) на веб-сайте не является хорошей идеей (или не уверен, но невозможно в html), даже в документах Google нет ALT в их списке ярлыков. И когда мы создаем IE или другие панели инструментов браузера, мы также должны сначала написать дополнительную логику для Get event in the toolbar, а затем обрабатывать события нажатия клавиши для ALT. - person Harsh Baid; 30.10.2011
comment
Обнаружение нажатий клавиш имеет образец, который также обнаруживает клавишу alt. - person Harsh Baid; 30.10.2011
comment
Я только что пошел и протестировал returnValue=false, но, похоже, это тоже не останавливает меню. - person Niet the Dark Absol; 30.10.2011

Помните, что если вам удастся успешно предотвратить обнаружение браузером комбинации клавиш, вы можете сделать свою страницу непригодной для использования некоторыми пользователями. Многие программы чтения с экрана зарезервировали практически любую клавишу, которую вы только можете придумать, для управления программой чтения с экрана, и если ваша страница была доступна с помощью программы чтения с экрана до того, как вы добавили код сочетания клавиш, это может быть полностью недоступным пользователям, которым нужны программы чтения с экрана после того, как вы добавите ее. .

Прочтите эту статью о ключах доступа (немного устарела, но, вероятно, все еще актуальна ) и эту статью о зарезервированных комбинациях клавиш, прежде чем потратить на это слишком много времени. проблема.

person Stein G. Strindhaug    schedule 30.10.2011
comment
Ключи доступа также зависят от браузера, так как проблема с этим вопросом stackoverflow.com/questions/515951/ - person Harsh Baid; 30.10.2011
comment
Поскольку сайт является игрой, он, вероятно, не будет использоваться пользователями неграфического браузера, если вообще будет использоваться, поэтому я не думаю, что влияние на доступность является большой проблемой. Тем не менее, спасибо за предупреждение, я буду иметь это в виду. - person Niet the Dark Absol; 30.10.2011