亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何檢測在 Javascript keyup 事件中何時按下 Shift+NumKey?

如何檢測在 Javascript keyup 事件中何時按下 Shift+NumKey?

Helenr 2021-08-26 14:38:44
我編寫了以下代碼,如果在鍵盤上按下 [Shift],則寫入控制臺“true”,否則寫入“false”。<script>    var el = document.getElementById("myInput");    el.addEventListener("keyup", function (e) {                    console.log(e.shiftKey);                });</script>出于某種原因,當通過按 10 鍵上的數字觸發事件時,此代碼不起作用。如果我按住 Shift 并按 Numpad5,它會記錄錯誤。我在 Chrome、Firefox 和 IE 中看到了相同的行為。當按下 10 鍵上的數字時,我需要能夠檢測用戶是否按住 [Shift]。編輯:為了回應@sagar 的評論,我專門用 1-10 鍵進行了測試,因為這是我希望我的用戶按下的鍵。其他鍵暫時將被忽略。我希望能夠判斷用戶何時按下數字 1-10 的鍵以及是否按下了 [Shift]。
查看完整描述

3 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

使用用戶必須按下才能執行此操作的鍵號創建一個對象:


const KeysEnum = {

        "ENTER": 16,

        "SHIFT": 13,

}


let keysPressed = {

};


const handleEventShiftAndEnterPress = () => {

      console.log ('User Press Shift Enter');

}


window.document.addEventListener ('keydown', function (event) {

      keysPressed[event.keyCode.toString()] = true;

    if (keysPressed [KeysEnum.SHIFT] && keysPressed [KeysEnum.ENTER]) {

       handleEventShiftAndEnterPress ();

       keysPressed [KeysEnum.SHIFT] = false; 

      keysPressed [KeysEnum.ENTER] = false;

    }

});

只要你控制擊鍵對象,你就可以隨時做和知道每個鍵的狀態,所以很容易做你需要的:)


查看完整回答
反對 回復 2021-08-26
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

你可以e.getModifierState("NumLock") status根據它是 ON 還是 OFF來確定你的條件,因為當它打開時你e.shiftKey是false,如果它關閉你e.shiftKey是true


按Num lock測試


var el = document.getElementById("myInput");

el.addEventListener("keyup", function(e) {


  console.log(e.getModifierState("NumLock"))

});

<input type="text" id="myInput" />


查看完整回答
反對 回復 2021-08-26
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

不幸的是,這似乎是 Windows 操作系統的一種限制,我不知道為什么存在這種限制。我在 StackOverflow 上看到過開發人員在其他上下文中遇到同樣問題的例子。

現在,這里有一個似乎有效的解決方案。我不喜歡它,我認為我不應該這樣做,但這是我能找到的最好的東西。

我發現當 NumLock 開啟時,如果我按住 [Shift] 并按下 [Num5],則會在 [Num5] 的 keydown 事件之前立即觸發來自 [Shift] 的 keyup 事件。在我的工作站上,如果我獲取這兩個事件的時間戳,它們將是 5 毫秒或更短的部分。我只是編寫了代碼來檢查這兩個時間戳,如果它們相距 10 毫秒或更短,我的應用程序就會響應輸入,考慮到用戶按住 [Shift] 并按下 [Num5]。

由于此代碼在瀏覽器中運行,我認為其他平臺不會有此限制,它仍然會檢查事件以指示 [Shift] 被按下。


查看完整回答
反對 回復 2021-08-26
  • 3 回答
  • 0 關注
  • 231 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號