2016-06-07 93 views
0

我的webapp已經實現了鍵盤快捷鍵。對於每個鍵,無論是否按下,都有一個布爾變量。當出現一些特定的快捷方式時,我會採取一些行動失去焦點時處理鍵盤事件的最佳方式

問題是,有些操作會使我的文檔失去焦點(例如打開對話框,保存對話框或簡單警報()),並且我的web應用程序無法找到密鑰是否被釋放。

即使在alert()期間,是否可以繼續獲取鍵盤事件?我知道我可以將所有鍵設置爲False,當出現一些快捷鍵時。有更優雅的東西嗎?

if(ctrlDown && mDown) alert("..."); 

看到這裏:https://jsfiddle.net/fvqhbLa1/1/該文件顯示是否按下Ctrl,M,B。但是當你按下Ctrl和M時,會有提醒,關閉它之後文件仍然認爲Ctrl和M被按下了。現在,您可以按下Ctrl鍵並在不按下M的情況下觸發警報()。

回答

0

發送警報時,您可以重置所有按下的鍵,因爲大多數用戶在顯示警告框時不會按Ctrl。

您還可以使用'e.shiftKey','e.ctrlKey'和'e.altKey'屬性檢查shift,ctrl和alt鍵是否關閉。

alert("Ctrl + M pressed!"); 
ctrlDown = bDown = mDown = false; 

https://jsfiddle.net/fvqhbLa1/3/

+0

我知道這個問題 「解決方案」。但我有大約100個快捷方式和100個動作,例如Ctrl + Space是動作A,Ctrl + Space + Alt是動作B(A和B保持焦點),我需要在A和B之間切換,只需按下並釋放Alt鍵(同時按住Ctrl和空格鍵)。如果我像你說的那樣做,我的代碼會延長兩倍。 –

+0

有沒有辦法讓按鍵沒有鍵盤事件?或者其他解決方案? –