Предотвратяване на неработещото действие по подразбиране за събитие?

Опитвам се да добавя клавишни комбинации на моя уебсайт, за да направя възможна бърза навигация с помощта на клавиатурата. Сблъсквам се обаче с лек проблем с моя опит за пряк път 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+интервал, каквото и да е.   -  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 и tab.
  • При натискане на клавиша 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