ディスパッチされたイベントオブジェクトにkeyCodeを設定しようとしています。
ボタンをクリックすると、テキストボックスコントロールでイベントが発生し、keydownイベントをシミュレートします。イベントは正常に発生しますが、keyCodeは0です。正しいkeyCodeを持つイベントオブジェクトをテキストボックスに送信する必要があります。 here のコードを使用しています。
ディスパッチされたイベントでkeyCode値を設定するにはどうすればよいですか?
<html>
<head>
</head>
<body>
<input type="button" id="btn" value="Click"></input>
<input type="text" id="txt"></input>
<script>
document.getElementById('btn').addEventListener("click", btnClick);
document.getElementById('txt').addEventListener("keydown", txtKeydown);
function btnClick(e) {
var txt = document.getElementById('txt');
var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) {
var e = document.createEvent("KeyboardEvents");
e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1));
e.keyCode = 83;
e.charCode = 0;
target.dispatchEvent(e);
};
var canceled = !dispatchKeyboardEvent(txt,
'keydown', true, true, // type, bubbles, cancelable
window, // window
's', // key
0, // location: 0=standard, 1=left, 2=right, 3=numpad, 4=mobile, 5=joystick
false, false, false); // Ctr, Alt, Shift
}
function txtKeydown(e) {
console.dir(e);
console.log(e.keyCode);
}
</script>
</body>
</html>
このバグが長い間そこに座っていることに驚いています。一般的なイベントを使用する回避策があるようです。これがデモです: http://jsbin.com/awenaq/
質問してから少し時間が経過しているようですので、質問に対する回答がすでに見つかるかもしれません。ただし、そうでない場合は、 this SO question で指摘された Webkitのバグ があり、keyCodeが常に0です。明らかに、修正するまでできることは多くありません。残念ながら、実際に取り組んでいるようには見えません。これは、あなたが聞きたい答えではありませんが、誰もが答えることができる唯一の答えです。このため今。
Androidデバイス、Sony Xperia、HTCデバイスなど)で同じ問題に直面しました。別の解決策を見つけました:この質問に対する私の回答を参照してください KeyCodeは常に0を返します
これは、(他の人が述べたように)KeyboardEventオブジェクト(keyCodeの代わりにcharCodeを使用)がEventオブジェクトの代わりに呼び出されているために発生します。使用している場合:
function txtKeydown(e) {
console.dir(e);
console.log(e.keyCode);
}
0
がコンソールに出力される場合は、e.charCode
ではなくe.keyCode
を使用してみてください
keyboardEventの詳細については、MDN Webドキュメントを参照してください: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent