4

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

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

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

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


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

jQueryでのcaretの取得/設定に適したものは何も見つかりませんでしたが、次の方法でその問題を解決できました。安定したら、最終的な拼音入力コードへのリンクを投稿します。今はかなり近いです。

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

4

2 に答える 2

8

キープレスをトリガーする運があまりないかもしれません-キープレスが信頼されていない限り(つまり、ブラウザから発信されたものでない限り)、それは拾われないでしょう。

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

私は小さなデモをまとめました - あなたが見る置換は実際の言葉と一致しませんが、それがどのように機能するかを示しています:

http://jsbin.com/emudi/ (ソースを編集するにはhttp://jsbin.com/emudi/edit )

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

交代はスペースプレスやアウェイのブレで発動。これに関する注意 - 特定の文字 (つまり「2」) で置換をトリガーできますが、キーを押すたびに置換を検索することはお勧めしません。

于 2008-10-14T23:57:02.077 に答える
1

また、クロスブラウザ方式で「caret」を制御する単純なコードの場合、これは便利です。

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

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

于 2010-02-21T18:23:16.257 に答える