Подтвердить что ты не робот

Internet Explorer или любой браузер для браузера F1 отображает вашу собственную помощь

Я хотел бы отобразить выбранный пользователем файл справки при нажатии F1. Это должно работать в каждом браузере, где я тестирую свое приложение. Как я могу остановить отображение файла справки по умолчанию?

4b9b3361

Ответ 1

AFAIK, действие по умолчанию клавиши F1 может быть изменено в любом браузере, кроме IE. Команды Microsoft обычно являются приверженцами поддержки постоянного пользовательского опыта в своих приложениях, и поэтому F1 открывает помощь, не возвращая false. При этом существует обходное решение в виде события window.onhelp.

// Internet Explorer
if ("onhelp" in window)
    window.onhelp = function () { 
        showMyHelpInsteadOfTheUsualDefaultHelpWindow(true); 
        return false;
    }
// Others
else {
    document.onkeydown = function(evt) {
        cancelKeypress = (evt.keyCode == 112);
        if (cancelKeypress) {  // F1 was pressed
            showMyHelpInsteadOfTheUsualDefaultHelpWindow(true);
            return false;
        }
    }

    // Additional step required for Opera
    document.onkeypress = function(evt) {
        if (cancelKeypress) 
            return false;
    }
}

"Другие" шаг был адаптирован из удаленного ответа, который был адаптирован из другого ответа, который, в свою очередь, был адаптирован из другой ответ.

Ответ 2

Собственно, вы можете отменить собственную Справку в IE, установив event.keyCode в 0:

Протестировано в IE8 и Chrome

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script type="text/javascript">
            $(function () {
                var cancelKeypress = false;
                // Need to cancel event (only applies to IE)
                if ( "onhelp" in window ) {
                    // (jQuery cannot bind "onhelp" event)
                    window.onhelp = function () {
                        return false;
                    };
                }
                $(document).keydown(function ( evt ) {
                    // F1 pressed
                    if ( evt.keyCode === 112 ) {
                        if ( window.event ) {
                            // Write back to IE event object
                            window.event.keyCode = 0;
                        }
                        cancelKeypress = true;

                        // Trigger custom help here
                        alert("My help");

                        return false;
                    }
                });
                // Needed for Opera (as in Andy E answer)
                $(document).keypress(function ( evt ) {
                    if ( cancelKeypress ) {
                        cancelKeypress = false; // Only this keypress
                        return false;
                    }
                });
            });
        </script>
    </head>
    <body>

    </body>
</html>