JSのキープレス(keydown/keypress)をシミュレートする方法に関する多くの記事にもかかわらず、私が使用しているブラウザ(Firefox ESR 17.0。 7、クロム28.0.1500.72、IE 10)。私がテストした解決策は、here,here、hereから取られました。JavaScript:テキストボックス/入力にキーイベントをシミュレート
私がしようとしているのは、テキストエリア/入力内の任意のキーストロークをシミュレートすることです。 "value"を直接変更する文字を追加/削除することはできますが、 "Up"、 "Down"、 "Home"などのキーのシミュレーションは入力できません。
documentationによれば、それは単純であるべきです。例:
var e = document.createEvent("KeyboardEvent");
if (e.initKeyboardEvent) { // Chrome, IE
e.initKeyboardEvent("keydown", true, true, document.defaultView, "Enter", 0, "", false, "");
} else { // FF
e.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, 13, 0);
}
document.getElementById("text").dispatchEvent(e);
実際に「Enter」キーダウンイベントが発生し、ハンドラがそれをキャッチできます。ただし、テキストエリアには何も影響しません。新しい行は表示されません。他のキーコードと同じです:文字は表示されず、矢印はキャレットの位置などを変更しません。
Orwellophileでコードを拡張し、http://jsfiddle.net/npF3d/4/に投稿しました。私のブラウザでは、どのボタンも、どのような状況でもテキストエリアに影響を与えません。
この問題についてお手伝いします。
OKを達成できる
は、私は、これはセキュリティ上の理由のために、意図的に行うことができるのと同じ感覚を持っていました。 Q/Aから:編集テキストは問題ではありませんが、問題は "上"、 "下"、 "家"などをシミュレートすることです。 – lexasss
テキストエリアを再作成すると、 /ラップ、サイズ、スタイリングが一致する各文字のインラインノードを含むブロックノードとして入力し、次にすべての異なる矩形を計算して、最終的にどこに配置するかを見つけます。私は実装が容易であるとは想像できません。おそらくよりクリーンな方法はモノスペースフォントを使用し、前の改行文字がどこにあったかを調べ、文字を数えてください。 –
ありがとうございます。しかし、google.comのように3ページ目の入力をシミュレートします。私の仮想キーボードはChrome拡張機能として実装されており、ユーザーはこのキーボードのみを使用して任意のページ上のフォームにテキストを入力して変更できるようにする必要があります。一部の機能を削除する必要がある場合は、大きな失望となります。 – lexasss