Internet Explorer或任何浏览器F1按键显示您自己的帮助

时间:2010-08-04 12:21:15

标签: javascript internet-explorer

我想在按F1时显示用户选择的帮助文件。这应该适用于我测试我的应用程序的每个浏览器。如何停止显示默认帮助文件?

2 个答案:

答案 0 :(得分:16)

AFAIK,可以在除IE之外的任何浏览器中更改F1键的默认操作。 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;
    }
}

“其他”步骤改编自已删除的答案,该答案改编自another answer,而another answer则改编自{{3}}。

答案 1 :(得分:2)

实际上,您可以通过将event.keyCode设置为0来取消IE中的原生帮助:

在IE8&铬

<!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>