Предотвратить действие события по умолчанию не работает ...? - PullRequest
8 голосов
/ 25 октября 2011

Я пытаюсь добавить сочетания клавиш на свой веб-сайт, чтобы сделать возможной быструю навигацию с помощью клавиатуры. Однако у меня возникла небольшая проблема с попыткой сочетания клавиш 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.

Ответы [ 3 ]

4 голосов
/ 30 октября 2011

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

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

Ссылочная ссылка

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

UPDATE

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

event.returnValue=false;

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

Некоторые общие замечания:

  • Как правило, Mac менее надежен, чем Windows, и некоторые ключи не могут быть обнаружены.
  • Проводник не запускает событие нажатия клавиш для удаления, завершения, ввода, выхода, функциональных клавиш, перехода в исходное состояние, вставки, pageUp / Down и tab.
  • Onkeypress, Safari выдает странные значения keyCode в диапазоне 63200 для удаления, завершения, функциональных клавиш, home и pageUp.Down. Значения onkeydown и -up являются нормальными.
  • Alt, Cmd, Ctrl и Shift не могут быть обнаружены на Mac, кроме как в Opera. Однако вы всегда можете использовать свойства altKey, ctrlKey и shiftKey.
3 голосов
/ 30 октября 2011

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

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

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

Я, как правило, просто стараюсь придерживаться ALT Shortcuts IE не упорно настаивают на обращении.

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

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

1 голос
/ 30 октября 2011

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

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

...