2014-02-24 64 views
1

我目前正在開發一個web應用程序,它要求我檢測是否按下了控件。evt.ctrlKey在jquery keyup事件中返回false

我用keydown事件的標誌設置爲true,如果按下的鍵是CTRL然後keyup事件該標誌設置爲false。如果按下的鍵是控制鍵,我正在使用evt.ctrlKey輕鬆返回true。

但讓我吃驚的是,我可以看到evt.keyCode等於17,而evt.ctrlKey給了我假的。

這不會發生在keydown事件中。

請參閱再現這種簡單fiddle。我使用的Firefox 27

PS:我知道,我可以測試如果keyCode 17,但我想知道如果我錯過了什麼。

+0

不同的事件確實等於不同的鍵碼。 – Alex

+0

你有沒有發現我發佈的小提琴有什麼不尋常之處?我的理解錯了嗎? – Bnrdo

+2

它沒有錯,keyup也爲ctrlkey返回false。只是不同的事件有不同的按鍵狀態。另外,ctrlkey可能在不同的操作系統上不可靠 – Alex

回答

4

根據W3C文檔,如果是法新社,如果不是假的,所以你的代碼工作權事件中ctrlKey屬性返回true。在keydown事件上按下ctrl - 所以它返回鍵碼17和真,在按鍵ctrl沒有按下,所以結果是17和false。

+0

我實際上在看[這裏](http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-MouseEvent-ctrlKey),我是與「壓抑」的含義混淆。我認爲「壓低」意味着與「釋放」(密碼)的「新聞」相反。然後我搜索了它「壓低」的含義,它實際上意味着「推動並導致向下移動」,這對您的答案有意義。 – Bnrdo

3

keyup文檔說:

中ctrlKey:true如果控制鍵是按下當事件被解僱。否則爲false

keyup和keydown事件被觸發已被按下/釋放鍵。所以ctrlKey的狀態對於keydown事件是正確的down,並且對於keyup事件是up。更明確地說,訂單是:

  1. CTRL鍵。
  2. Keydown事件被解僱。
  3. 發佈CTRL關鍵。
  4. Keyup事件被觸發。

此外,如果你正在尋找CTRL關鍵本身你應該檢查關鍵代碼,而不是ctrlKey屬性。後者用於檢查組合鍵,例如,如果您想要CTRL + S,您將檢查{ keyCode: 83, ctrlKey: true }的鍵位/鍵位事件。