2009-03-04 112 views
5

什麼是使用JavaScript爲Web應用程序創建全局鍵盤快捷鍵處理程序的最健壯的方式,即應該處理哪些事件以及應該附加哪些事件處理程序?使用JavaScript實現健壯的鍵盤快捷鍵處理

我想要一些類似Gmail中的系統,它可以處理單個按鍵快捷鍵以及帶修飾鍵的快捷鍵,例如Ctrl + B等代碼必須在IE 6以及現代瀏覽器中工作。

我有Prototype框架可以使用但不是jQuery,所以請不要使用jQuery特定的答案!

+0

http://www.openjs.com/scripts/events/keyboard_shortcuts/ – James 2009-03-04 16:51:57

+0

我會檢查出來 - 謝謝。你爲什麼不作爲答覆發佈? – 2009-03-04 17:03:04

回答

5

LivePipe控件包中提供的HotKey庫適用於Prototype,並且與IE兼容。

http://livepipe.net/extra/hotkey

+0

我打算接受你的回答,因爲這看起來像我正在尋找的東西,因爲該網站上還有很多其他有趣的東西,所以謝謝! – 2009-03-04 21:17:32

+0

被警告,如果按下未指定的修飾符(例如,指定ctrl + a,按下ctrl + shift + a,檢測到ctrl + a),HotKey顯然會接受組合。 – eyelidlessness 2009-03-06 09:18:45

3

我會做的是將onKeyUp事件附加到document.body。然後,在這個事件處理程序中,我將使用Element.fire方法來觸發自定義事件。儘管此步驟是可選的,但它有助於將事件處理程序與要執行的操作分離,並且可以使用相同的自定義事件處理程序來說出按鈕單擊事件。

$(document.body).observe("keyup", function() { 
    if(/* key + modifier match */) { 
     $(document.body).fire("myapp:mycoolevent"); 
    } 
}); 

$(document.body).observe("myapp:mycoolevent", function() { 
    // Handle event. 
}); 

後來,同一事件綁定到一個按鈕點擊:

$(button).observe("click", function() { 
    $(document.body).fire("myapp:mycoolevent"); 
}); 

至於處理修飾鍵而言,退房this resource(很老了,但看上去仍然適用)以獲得更多幫助。

+0

Keyup似乎有問題。至少在OS X上(但我相信在Windows和大多數Linux WM上也是如此),大多數關鍵命令都會在keydown上激活。這種期望(通過適當的檢查)也對快捷方式實施了某些期望:修飾鍵必須是第一個,每個快捷鍵只有一個可打印的鍵。 – eyelidlessness 2009-03-06 09:23:41

2

還有一個名爲jwerty新的JavaScript庫,它很容易使用,並且不依賴於jQuery的。