2

Alt以下を使用して、いくつかのキーボードのキーコード ( + W) をシミュレートしようとしていinitKeyEventます。

evt = document.createEvent("KeyboardEvent");
evt.initKeyEvent("keypress",true,true,window,0,true,0,0,?,?);
body.dispatchEvent(evt);

問題は、 の仮想キー コード値と Unicode 文字が見つからないことですw。Firefox の主要なイベントはここに文書化されていますが、私には意味がわかりません。

ここinitKeyEventで指定します

4

2 に答える 2

4

それは確かに少し複雑ですが、主に歴史的な理由からです。keypressあなたが見ているのかkeydown/keyupイベントを見ているのかによって物事は異なります。イベントは、keypress可能な限り文字コードで機能します。これは、印刷可能な文字(テキストフィールドに含めることができる文字)の場合、パラメーターが0のときにパラメーターcharCodeを設定する必要があることを意味します。パラメーターは実際には文字のASCIIコードです。つまり、あなたの場合(文字)は次のようになります。 :keyCodecharCodew

evt.initKeyEvent("keypress", true, true, window, 0, true, 0, 0, 0, "w".charCodeAt(0));

印刷できない文字の場合、またはkeydown/keyupイベントを使用する場合は、keyCodeパラメーターを設定し、0を。として渡す必要がありますcharCode。このパラメーターは、仮想キーコードを参照します。ここで使用するキーコードは次のDOM_VK_Wとおりです。

evt.initKeyEvent("keydown", true, true, window, 0, true, 0, 0, evt.DOM_VK_W, 0);

定数DOM_VK_WはFirefoxでのみ定義されていますが、他のブラウザとの互換性のために、その数値を使用する必要があります。

evt.initKeyEvent("keydown", true, true, window, 0, true, 0, 0, 87, 0);

仮想キーコードは多くの文字のASCIIコードと同じですが、同じものではありません。特に、仮想キーコードは、キーボードで押されている実際のボタンを参照するため、小文字と大文字を区別しません。CtrlWこれは、で処理されるようなキーの組み合わせには関係ありませんkeydown。一方、テキストフィールド(処理keypress)はこの違いに非常に注意を払っています。ここでは、追加される実際の文字を示すASCIIコードが使用されています。

このアプローチ(キーボードで押されたボタンのイベントとこれらのボタンが生成する実際の文字を区別する)と実際の仮想キーコードの両方がWindowsから「借用」されていることに注意してください。

于 2013-01-18T08:23:23.470 に答える
0

参照するページを見ると、2番目のドキュメントで定義されている仮想キーコードを使用できます。

94   const unsigned long DOM_VK_W              = 0x57;

これはコードを与えるでしょう

evt.initKeyEvent("keypress", true, true, window, 0, true, 0, 0, 87, 0);

または、同じ値である文字コード(最後の引数)を渡すこともできます。

evt.initKeyEvent("keypress", true, true, window, 0, true, 0, 0, 0, 87);

注意:これをテストすることはできませんでした。これはドキュメントに直接基づいています。

于 2013-01-18T07:02:43.817 に答える