お世話になります、石井と申します。スマートフォンなどで名前の姓、名を打ち込み後に変換→確定の順番に操作をされる思いますが、変換前のひらがな状態を一時的にjavascriptかPHPでブラウザー保管出ますでしょうか?保管したものを呼び出して”かな”に表示させようとしてます。もし方法があれば教えていただきたいです。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
日本語変換への入力途中の文字を取得する方法としてJavaScriptにはCopmositionEventというのがあります。
MDN:CompositionEvent
compositionstartではじまり、未確定文字入力や部分変換とかする度にcompositionupdateが呼ばれ、確定後にcompositionendが呼ばれます。これらのeventでは、入力途中や変換前の文字列が入っているので、変換前の文字列も取得できます。これらを工夫すれば、変換前の文字列を取得できるかと思います。
ただし、注意事項があります。
- 最新のスマホであれば大丈夫だと思いますが、全てのブラウザで対応しているとは限りしませんし、中には制限や動作が異なるモノががあったりします。
- eventのコールバックで取得できる文字列について、変換前の文字なのか、変換中の文字なのか、変換後の文字なのかは区別できません(判るのは現在変換の途中なのか、確定後なのかだけです)。自分で変化を確認しながら、変換前や変換後を予測する必要があります。
たとえば、「ashitanotennki[SPACE][Enter]」と入力したとすると
compositionstart: "" // ここは現在選択されている文字列が入ります。 compositionupdate: "あ" compositionupdate: "あs" compositionupdate: "あsh" compositionupdate: "あし" compositionupdate: "あしt" compositionupdate: "あした" compositionupdate: "あしたn" compositionupdate: "あしたの" compositionupdate: "あしたのt" compositionupdate: "あしたのて" compositionupdate: "あしたのてn" compositionupdate: "あしたのてん" compositionupdate: "あしたのてんk" compositionupdate: "あしたのてんき" compositionupdate: "明日の天気" compositionend: "明日の天気"
というような形になります(ブラウザによって異なる場合もあります)。部分確定とかBACKSPACEとか入るとさらに複雑になります。
※上はローマ字入力の場合です。フリック入力だとローマ字入力の途中がなくなるだけですが、トグル入力だとまた別の様相になります。
投稿2015/10/16 12:28
総合スコア21735
0
色々考えてみたのですが・・
・変換された時のイベントが取れない
・名前が漢字とは限らない
・予測変換から入力した場合は完全なひらがなを取れない
といった問題から、対応するのはかなり難しいと思います。
簡単にスクリプトを書いてみましたが、完全には対応できませんでした。
下記のスクリプトは
・ひらがなで入力される
・名前は全て漢字
・読みを全て入力してから変換する。(さ→佐藤という変換は考慮しない)
という前提で作成しました。
※実戦で使える品質ではないので参考までに。。。
html
1姓<input type="text" id="js-sei"> 2姓(かな)<input type="text" id="js-sei-kana">
javascript
1$(function() { 2 var kana = ''; 3 $('#js-sei').on('keydown blur', function() { 4 var input = $(this).val(); 5 if(input === '') { 6 $('#js-sei-kana').val(''); 7 kana = ''; 8 return; 9 } 10 if(input.match(/^[ぁ-ん]+$/)) { 11 // 入力文字が全てかなの場合は変換前と判断 12 kana = input; 13 } else if(input.match(/^[一-龥]+$/) && kana !== '') { 14 // 入力文字が全て漢字の場合は変換されたと判断 15 $('#js-sei-kana').val(kana); 16 } 17 }); 18});
追記
さとう→佐藤
ではなく
さ→佐
とう→藤
と、二段階で入力した場合も正しく取れませんね。。
対応するとしたら末尾のひらがなを正規表現で取得してkanaに文字列結合させるなどの処理が必要です。
投稿2015/10/16 11:52
編集2015/10/16 12:08総合スコア897
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/10/19 01:02