2011-05-17 92 views
0

我有一個借用的按鍵處理程序,用於跨瀏覽器工作,但現在不再適用於webkit瀏覽器。任何人都可以提供建議如何解決?跨瀏覽器鍵盤事件處理程序

這裏是處理:

function handleKeys(e) { 
    //credit: http://santrajan.blogspot.com/2007/03/cross-browser-keyboard-handler.html 
    var character; 
    var evt = (e) ? e : window.event;  //IE reports window.event not arg 
    if (evt.type == "keydown") { 
     character = evt.keycode; 
     if (character < 16 ||     // non printables 
      (character > 16 && character < 32) ||  // avoid shift 
      (character > 32 && character < 41) ||  // navigation keys 
      character == 46) {     // Delete Key (Add to these if you need) 
      handleNonChar(character);   // function to handle non Characters 
      nonChar = true; 
     } else 
      nonChar = false; 
    } else {        // This is keypress 
     if (nonChar) return;    // Already Handled on keydown 
     character = (evt.charCode) ? 
        evt.charCode : evt.keyCode; 
     if (character > 31 && character < 256)  // safari and opera 
      handleChar(character);    // 
    } 
} 

處理程序被稱爲像這樣的網頁:

<script> 
document.onkeydown = function(e) {handleKeys(e)} 
document.onkeypress = function(e) {handleKeys(e)} 
var nonChar = false; 
</script> 

謝謝!

+1

適用於我(Chrome),除非您未發佈'handleNonChar' /'handleChar':http://jsfiddle.net/eXYdV/。 – pimvdb 2011-05-17 16:17:49

+0

如果jQuery .keypresS()適用於webkit瀏覽器,你有沒有試過?如果是這樣,我會使用它。 – slemdx 2011-05-17 16:18:05

+0

我認爲pimvdb是一些東西 - 我意識到沒有handleNonChar()定義了停止Webkit,但Mozilla顯然忽略了。 – 2011-05-19 04:33:51

回答

0

如果你配對一個JS庫,將正常化中charCode /鍵代碼的差異,並結合專用鍵盤輸入,你應該做出來相當不錯的插件使用。

我用jQueryHotKeys Plugin。但是,您也可以在沒有jQuery的情況下使用shortcut keyboard handling(HotKeys插件基於此)。

我喜歡這些提供的鍵盤快捷鍵功能 - 但應該注意的是,某些鍵盤組合可能會觸發(或用戶可能期望它們觸發)特定瀏覽器中的某些操作。

E.g.您可以捕獲一個[CTRL] + [A]鍵盤組合,但如果您阻止選擇所有文本 - 我可以看到用戶被加重。