Internet Explorer или любая клавиша браузера F1 отображает вашу собственную помощь - PullRequest
11 голосов
/ 04 августа 2010

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

Ответы [ 2 ]

16 голосов
/ 04 августа 2010

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 голосов
/ 21 февраля 2012

На самом деле, вы можете отменить собственную справку в 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's event object
                            window.event.keyCode = 0;
                        }
                        cancelKeypress = true;

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

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

    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...