1

whichプロパティを希望の値に設定するために、プログラマチックにChrome上でkeydownイベントをトリガする方法はありますか?プログラムで `which`プロパティを使用してkeydownイベントをトリガーする

new KeyboardEvent('keydown', { 
    'which':65, 
    'charCode':65, 
    'keyCode':65, 
    'key':"a", 
    'code':"KeyA", 
}); 

を試みたが、入力のonKeyDownハンドラでプロパティを受信したときに、イベントが0に等しいwhich,charCode and keyCodeを持っています。 keyaに正しく設定されています。 Chromeのヘルプ

+1

完全なコードは何ですか? – epascarello

+0

これはなぜ必要なのですか?実際の 'keydown'イベントが' 65'キーでトリガされた場合に実行されるコードを呼び出すことはできませんか? –

+0

これは 'keyCode'が' KeyboardEvent'コンストラクタの文書化された部分であるので、ブラウザのバグのようです。 – Ryan

答えて

1

ため

おかげで、これらのイベントプロパティは0のデフォルト値を持っているし、(それらのは廃止されることに)書き込み可能ではありません。あなたはネイティブのプロパティを削除してする必要があり、それらを再作成:

var ke = new KeyboardEvent('keydown', { 
 
    'key':"a", 
 
    'code':"KeyA", 
 
}); 
 

 
// Delete native event read-only properties with default values of 0 
 
delete ke.keyCode; 
 
delete ke.charCode; 
 
delete ke.which; 
 

 
// Create new custom properties that are read/write: 
 
Object.defineProperty(ke, "keyCode", {"value" : 65}); 
 
Object.defineProperty(ke, "charCode", {"value" : 65}); 
 
Object.defineProperty(ke, "which", {"value" : 65}); 
 

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

 
el.addEventListener("keydown", function(evt){ 
 
    console.log(evt.key, evt.code, evt.keyCode, evt.charCode, evt.which); 
 
}); 
 

 
el.dispatchEvent(ke);
<input type="text" id="key">

関連する問題