質問

特定のキーストロークをトリガーして動的に検証する入力要素(type = text)またはtextarea要素が必要です。これは中国語のピンイン入力に使用されるため、たとえば次のようになります。

ユーザーは「ma2」と入力します;入力要素に。キーダウンイベントはキーストロークごとにトリガーされ、2は表示されません。代わりに、ユーザーが「2」を押すと、 「a」次のようなトーンマークを受け取ります:"á"。最後に、ユーザーは「má」と入力します。

これは、$(element).val()を使用して入力値全体を読み取って変更することで実現できますが、入力要素にフォーカスがあり、その値が.val(" something")を呼び出して設定されている場合、カーソルテキストの最後に移動します。ユーザーはフィールドの最後で入力を続けるため、これはほとんどの状況で正常に機能しますが、すべての状況で機能するようにしたいです。

...この問題の別の解決策は、inputまたはtextarea要素内のカーソルの位置を取得/設定することです。ただし、これはjavascriptでは不可能だと思います。


それで、レミーは確かに正しい軌道に乗っていた。キープレスをトリガーしても、とにかく面倒なことをせずに特殊文字を入力することはできません。代わりに、keydownイベントをキャッチし、input / textareaの値を設定してから、キャレットを移動します。

jQueryでキャレットを取得/設定するのに適したものは見つかりませんでしたが、次のことで問題が本当に解決しました。安定したら、最終的なピンイン入力コードへのリンクを投稿します。もうすぐです。

http://blog.vishalon.net/Post/57.aspx http://demo.vishalon.net/getset.htm

役に立ちましたか?

解決

キープレスをトリガーする幸運はあまりないかもしれません-キープレスが信頼されていない(つまりブラウザから発信されている)場合を除き、ピックアップされないでしょう。

ただし、文字列の最後まで撃つのではなく、テキストの置換を行って、カラットを元の場所に挿入することができます。 setSelectionRangeおよびcreateTextRange(IEの場合)を使用する必要があります。

小さなデモを作成しました-表示される置換は実際の単語とは一致しませんが、それがどのように機能するかを示しています:

http://jsbin.com/emudi/ (ソース http://jsbin.com/emudi/edit

トリックは、カラットがどこにあるかをメモし、見つかった単語をsubstrを使用して置き換えて(間違った一致を置き換えるのを避けるために正規表現ではなく)、新しい単語の末尾にカラットを再配置することです。

置換は、スペースを押すか、距離をぼかすことでトリガーされます。これに関する注意-特定の文字(つまり、「2」)で置換をトリガーできますが、 every キー押下で置換を検索することはお勧めしません。

他のヒント

また、「キャレット」を制御する単純なコードの場合、クロスブラウザの方法では、これは便利です:

http://javascript.nwbox.com/cursor_position/

答えに少し遅れましたが、この古いものはまだ役に立つと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top