2013-05-18 42 views
1

我在Chrome中构建了一个Web应用程序,我需要一些快捷键并希望使用功能键。在Chrome中覆盖功能键默认操作

但是,F1触发帮助窗口,F3触发页面搜索,F5刷新等。 我想要否决这些键,因为它们在我的上下文中没有用处。

但是......我无法防止默认值被触发。 这里是我的代码:

$(document).keyup(function(e) { 

    // GET KEYCODE 
    var keyCode = e.keyCode;       //alert(keyCode); 

    // CHECK KEYBOARD CONTEXT 
    var keyboardContext = $('#keyboard-context').attr('data-context'); 

    // JS KEYCODES FOR FUNCTION KEYS 
    var functionKeys = new Array(112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123); 
    var keyNames = new Array('F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12'); 

    // CONVERT KEYCODE INTO KEYNAME, FOR EASE OF BINDING IN DOM 
    for (var i = 0; i < functionKeys.length; i++) { if (functionKeys[i] === keyCode) { keyCode = keyNames[i]; } } 

    // MAKE SURE THAT THE QUICK LAUNCH SHORTCUT KEY, ALWAYS LAUNCHES THE QUICKNAV 
    if (keyCode === 'F1') { 
     $('.keyboard-shortcut').each(function() { 
      if ($(this).data('shortcut-key') === keyCode && $(this).hasClass('load-small-content') && $(this).attr('data-keyboard-context') === 'launch-quick-nav') { 
       loadSmallContent($(this).data('load-from')); 
      } 
     }); 

    } 

    // PREVENT DEFAULT FOR FUNCTION KEYS 
    if (functionKeys.indexOf(keyCode) > -1) { 
     e.preventDefault(); 
     e.stopPropagation(); 
     return false; 
    } 
}); 

我能做些什么来防止例如F1打开帮助页面?

+0

HTTP:// WWW .quirksmode.org/js/keys.html链接可能会帮助你 –

+0

抱歉,没有找到帮助... – EibergDK

回答

2

我想出了一个解决方案。下面应该只在.js文件中包含的任何地方...

function disableFunctionKeys(e) { 
    var functionKeys = new Array(112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 123); 
    if (functionKeys.indexOf(e.keyCode) > -1 || functionKeys.indexOf(e.which) > -1) { 
     e.preventDefault(); 
    } 
}; 

$(document).ready(function() { 
    $(document).on('keydown', disableFunctionKeys); 
}); 

为了防止其他按键比F键,只是把JS键码到数组:)