2010-08-04 59 views
10

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

+0

“这应该对每一个浏览器在那里我测试我的应用程序。” →哪些? – 2010-08-04 12:23:26

+0

我应该打开的帮助文件应该适用于像Mozila,IE等其他浏览器。如果我在任何浏览器上按F1,不应该显示默认的帮助文件 – Dotnet 2010-08-04 12:27:45

+0

我假设存在一个问题...但我似乎无法找到一个。 – Stephen 2010-08-04 12:28:29

回答

15

AFAIK,F1键的默认动作可以在除IE以外的任何浏览器中更改。微软的团队通常都是坚持在整个应用程序中保持一致的用户体验,这就是为什么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

+1

哦不,他们试图防止损害正常的用户体验(这不是一件坏事,恕我直言),但他们提供了另一个(更简单)的功能,能够做到这一点? – 2010-08-04 12:32:25

+0

@Marcel:我说错了。有意提供* onhelp *事件来替换默认帮助,但也有意不让F1键被取消。奇怪,我知道。 – 2010-08-04 12:35:54

2

其实,你可以取消IE浏览器的原生帮助,通过设置event.keyCode0

在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> 
相关问题