在 Chrome 中的文字區域元素上模擬按鍵事件對於自訂使用者互動至關重要。但是,某些嘗試可能會產生意外結果。
您嘗試使用 initKeyboardEvent 和所需的 keyCode 啟動 keydown 事件,但文字區域最終註冊了不正確的鍵值(Enter 而不是預期的字母)。另一種涉及屬性覆蓋的替代方法也被證明是不成功的。
要解決此問題,除了「keyCode」之外,您還需要覆寫「which」屬性。這是修改後的程式碼範例:
<code class="js">document.addEventListener('keydown', e => console.log( 'altKey : ' + e.altKey + '\n' + 'charCode (Deprecated) : ' + e.charCode + '\n' + 'code : ' + e.code + '\n' + 'ctrlKey : ' + e.ctrlKey + '\n' + 'isComposing : ' + e.isComposing + '\n' + 'key : ' + e.key + '\n' + 'keyCode (Deprecated) : ' + e.keyCode + '\n' + 'location : ' + e.location + '\n' + 'metaKey : ' + e.metaKey + '\n' + 'repeat : ' + e.repeat + '\n' + 'shiftKey : ' + e.shiftKey + '\n' + 'which (Deprecated) : ' + e.which + '\n' + 'isTrusted : ' + e.isTrusted + '\n' + 'type : ' + e.type )); const Podium = {}; Podium.keydown = function(k) { const oEvent = document.createEvent('KeyboardEvent'); // Chromium Hack Object.defineProperty( oEvent, 'keyCode', { get : function() { return this.keyCodeVal; } } ); Object.defineProperty( oEvent, 'which', { get : function() { return this.keyCodeVal; } } ); if (oEvent.initKeyboardEvent) { oEvent.initKeyboardEvent("keydown", true, true, document.defaultView, false, false, false, false, k, k); } else { oEvent.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, k, 0); } oEvent.keyCodeVal = k; if (oEvent.keyCode !== k) { alert("keyCode mismatch " + oEvent.keyCode + "(" + oEvent.which + ")"); } document.dispatchEvent(oEvent); } //Sample usage Podium.keydown(65);</code>
透過覆蓋“keyCode”和“which”,您可以確保在 keydown 事件期間註冊正確的鍵代碼和相應的鍵。這種方法修正了不正確的按鍵註冊問題,並允許準確的按鍵模擬。
以上是在Chrome中模擬Keydown時,為什麼會註冊錯誤的金鑰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!