2010-04-22 77 views
5

我在試圖捕捉鍵盤快捷鍵時發現了一個問題:CTRL +箭頭。如何處理Javascript中的Ctrl +箭頭?

我已經處理了keydown事件。現在,當我持有CTRL鍵時,keydown事件被觸發一次。如果我拿着一個箭頭(所以現在我拿着CTRL +箭頭)它不會觸發另一個事件。禁止出於任何原因嗎?我想我幾年前在Opera中已經遇到過這個問題,並且在瀏覽器中有一個選項。

我的結果:

  • 控股CTRL,按箭頭 - 火災事件CTRL和箭頭

  • 按CTRL 不會觸發一個事件+一次箭頭 - 觸發一個事件,但只有密鑰碼爲CTRL

  • 控股CTRL,按下一個字母(如小號。) - 按預期工作

  • 按CTRL +信(如小號。) - 按預期工作

(結果在Chrome和Firefox中是相同的,上面描述的行爲是否爲標準?)

我使用:

  • function OnKeyDown(e) { }
  • e.ctrlKey,事件

的問題是e.which屬性:可能是什麼問題?

回答

10

你應該檢查event.ctrlKey標誌是真實的,是這樣的:

document.getElementById('element').onkeydown = function (e) { 
    e = e || window.event; 
    var keyCode = e.keyCode || e.which, 
     arrow = {left: 37, up: 38, right: 39, down: 40 }; 

    if (e.ctrlKey) { 
    switch (keyCode) { 
     case arrow.left: 
     //... handle Ctrl-LeftArrow 
     break; 
     //... 
    } 
    } 
}; 

檢查爲例here

+0

我正在檢查event.ctrlKey。我寫在我的問題。我試過你的代碼:http://pastebin.org/168399 - 它不起作用 - 可能是我的鍵盤有問題。 – 2010-04-22 19:05:49

+0

我將代碼發佈到了pastebin,因爲我不知道如何用這麼長的代碼來回應你的回答(評論太短,添加代碼作爲回答是粗魯的,向代碼中添加代碼是非系統的)。 * CONFUSED * – 2010-04-22 19:08:37

+0

我在播放[這裏](http://jsbin.com/ojaki3)和你發佈的代碼,並且如果* LeftArrow *(沒有按下Ctrl)被按下,它就會正常工作,它會顯示airs「gosh」,if * Ctrl * - * LeftArrow *,警報「heureka」... – CMS 2010-04-22 19:11:37