- ベストアンサー
スマホで文字入力画面を表示させたくない(html)
input要素のテキストフィールド<input type="text">にフォーカスしたとき、スマホの文字入力画面を表示してほしくないのですが、なにか方法はありますか? 端末側で設定するのではなく、Webサイト側で制御したいのです。 input要素をreadonlyやdisabledにすれば表示されませんが、そうしてしまうとキャレットを制御できなくなってしまうため、だめでした。 キャレットは制御できるけど文字入力画面はでない。なんて方法、ご存知のかたいらっしゃいませんか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
「selectionPosition」がなんのことかわからないけど、重要そうじゃないから放置するね。 えっと readonly や disabled ということは、 『データは表示されるけど入力できなくていい』 ってことだよね。 まず、入力が不要ならどうして input 要素なんだろう? カーソルが無くても『選択されてる感じ』が表現できればいいのか、それとも、カーソでの表現は強制されているのか? 1) 『|』必須 2) カーソルは文字間を表現できればいい 3) 文字を選択した感じを表現できればいい 4) カーソルは項目を選択している表現できればいい 1) なら、input 要素を使わないで p とか div とかで、カーソルは、文字を span で一文字ずつタグ付けして border-left で表現。 2) なら、1) の border-left の変わりに、左下寄りに、たとえば三角形▲の画像を background-image にするとか、ちょっとおしゃれな画像にするとか……かな?.gif なら、window.setInterval を使わないで点滅が表現できるから、ちょっとお得。 3) なら 1) の border-left を background-color で。 4) なら input type="radio" で、表現は CSS。
その他の回答 (6)
- fujillin
- ベストアンサー率61% (1594/2576)
スマホの実装がどうなっているのかまったく知らないので、単なる思いつきですが… 「contenteditable」属性ってどのように実装されているのでしょうか? (場合によってはご質問の回答のヒントにでもならないかと…) まぁ、PCでもブラウザによって実装が異なるようなので、使えないかも知れませんけど。
お礼
いま手元にandroidがないのでiphoneですが、動作しました。 しかし、inputと同じく文字入力が呼び出されてしまいます。 ヒントを下さってありがとうございました!
- dscripty
- ベストアンサー率51% (166/325)
仕切り直し。 「なにか方法はありますか?」 無し。 「キャレットは制御できるけど文字入力画面はで ない。なんて方法、ご存知のかたいらっしゃい ませんか?」 何のために? それはできないけど、その奥にかくれた目的の解決はできるかもしれない。
補足
ボタン操作をUIとしたWebアプリで、カーソル移動を擬似的に行いたいためです。 システム的にはselectionPositionを制御してカーソル(キャレット)を移動しています。 文字入力画面が出てしまうと、UIであるボタンが隠れてしまうために無効にしたいのです。 擬似的に「|」などでキャレットを実装すれば不可能ではありませんが、プログラムが複雑になりバグも生みやすいと考えたのでこの質問を投稿した次第です。
- dscripty
- ベストアンサー率51% (166/325)
「HTMLにimeoff="imeoff"のような属性を作って、ブラウザがそれを見つけた時にIMEを呼びださなければいいんじゃないですか?」 → [ANo.2]
補足
>>どう実装する? と問われたので答えたのであって、 独自開発で実装したところで普及する確率の方が低いですし、 そもそも随分前から本来の質問の趣旨とずれてるのでこのへんで閉めます。 おもしろい意見が聞けたのは良かったです!
- dscripty
- ベストアンサー率51% (166/325)
指摘がシンプルだったから、特別ね! タブインデックスは、ブラウザの『サンドボックス』の中のはなしなので全く別。 IME の切り替えは、HTMLの要素の属性によって、ブラウザが実装している機能。 たとえば、input type="password" このときは、アルファベットだけど、それ意外の入力はローカル言語変換(日本の場合は日本語入力変換)モードにするようにブラウザが実装している。 日本語ならパスワードにひらがなを入力できても全然問題ない。漢字だと変換結果が見えないからむりだけど。でも、ブラウザはお節介にも日本語入力にしてくれてる。それは、いまのWebシステムにひらがなのパスワードを入力させるシステムがほとんどないし、IME が入力中の伏せ字に対応してないからそれでも問題にならないし、逆に親切。 じゃあ、質問者さんの質問/提案は、どの階層の機能で、現状の HTML だけで、どう実装する?
補足
HTMLにimeoff="imeoff"のような属性を作って、ブラウザがそれを見つけた時にIMEを呼びださなければいいんじゃないですか? 入力を求めるんじゃなくて、キャレットが制御出来れば良いので、ブラウザの判断でIMEを呼び出さないようにすればいいんじゃないでしょうか。
- dscripty
- ベストアンサー率51% (166/325)
そう思ったのなら、補足にコメントを書いている場合じゃないよ! それを実装したウェブブラウザを質問者さんが作らないと。 大丈夫! みんなに受け入れられれば、他のブラウザもきっと追従するよ? それか、 ウェブブラウザの開発者に提案すればいい。 いや、今すぐ提案しよう!
補足
論点がずれてますね!
- dscripty
- ベストアンサー率51% (166/325)
それは、ブラウザが使ってる OS の機能だから、他人が作った Web ページからコントロールできちゃうと良くないとおもう。
補足
たしかにそうですが、それならIMEの切り替えやtabindexもコントロールできるのが良くないということになりますよね。 悪意ある使われ方すると問題ですが、使えると便利な機能じゃないですか?
お礼
もちろん、キャレットをエミュレートすればいいのは確かです。 でもスマートではないので、なにか方法がないかと質問した次第です。 答えが見いだせないので、この質問は示させて頂きますね。 お付き合いいただきありがとうございました。 それと、selectionPositionは誤りで、setSelectionRangeでした。 訂正します。
補足
>>まず、入力が不要ならどうして input 要素なんだろう? 特に苦労せずに入力エリアを表現できたからです。