電話:テキスト入力用の数字キーボード


178

電話で数字キーボードを強制的に起動する方法はあり<input type="text">ますか?私はちょうどことに気づいた<input type="number">ことは、クレジットカード番号、ZIPコードなどに適していないので、HTML5で「浮動小数点数」のためであります

<input type="number">浮動小数点数以外の数値を取る入力に対して、の数値キーボード機能をエミュレートしたいと思います。inputそれを行う別の適切なタイプはありますか?


郵便番号に対する良い答えはまだありません。私はここで、具体的、国際郵便番号のため、この質問を-尋ね再:stackoverflow.com/questions/25425181/...
ライアンMcGeary

私はこれを行うハッキーな方法を見つけました..sort of:stackoverflow.com/a/25599024/1922144
davidcondrey

2015年半ばの時点で、これを行うためのより良い方法があります。stackoverflow.com
Aaron Gray

回答:


206

できます<input type="text" pattern="\d*">。これにより、数字キーボードが表示されます。

詳細については、こちらを参照してください:iOS向けのテキスト、Web、および編集プログラミングガイド

<form>
  <input type="text" pattern="\d*">
  <button type="submit">Submit</button>
</form>


23
数字キーボードだけが必要で、検証はしたくない場合(Chromeなど)、フォームにnovalidate属性を配置できます。<フォーム... novalidate>
Brian

4
これは\d*機能せず、[0-9]必須であることがわかりました。これはで動作することに注意してくださいtype='numeric'。これは、リンクされたドキュメントの郵便番号のリファレンスに基づいて提案されています。
ブレット・ライアン

11
これは、数値のみが必要である限り機能します。「。」を必要とする浮動小数点数 (または一部の地域では「、」)キーボードにはこれらの文字が含まれていないため、入力できません。
DrHall 2014

2
使用する必要がある場合。(ドット)、どうすれば使用できますか?このパターンは[0-9]のみを示しています

15
<input type = "text" pattern = "\ d *">はAndroidでは機能しませんか?私はiOSでテストし、正常に動作しましたが、Androidでは動作しませんでした。どうすれば解決できますか
kamal 2015

158

2015年半ばの時点で、これが最良の解決策であると信じています。

<input type="number" pattern="[0-9]*" inputmode="numeric">

これにより、AndroidとiOSの両方でテンキーが提供されます。

ここに画像の説明を入力してください

また、上向き/下向きの矢印ボタンとキーボードに適した上向き/下向きの矢印キーの増分により、期待されるデスクトップの動作を提供します。

ここに画像の説明を入力してください

このコードスニペットで試してください。

<form>
  <input type="number" pattern="[0-9]*" inputmode="numeric">
  <button type="submit">Submit</button>
</form>

とを組み合わせるtype="number"pattern="[0-9]*、どこでも機能するソリューションが得られます。また、将来のHTML 5.1で提案されているinputmode属性との前方互換性があります。

注:パターンを使用すると、ブラウザーのネイティブフォーム検証がトリガーされます。novalidate属性を使用してこれを無効にするか、title属性を使用して検証が失敗した場合のエラーメッセージをカスタマイズできます。


先行ゼロ、カンマ、または文字(国際郵便番号など)を入力できるようにする必要がある場合は、このわずかなバリエーションを確認してください。


クレジットとさらに読む:

http://www.smashingmagazine.com/2015/05/form-inputs-browser-support-issue/ http://danielfriesen.name/blog/2013/09/19/input-type-number-and-ios-テンキー/


1
HTML5 type="number" 仕様によると、次のコンテンツ属性は指定してはならず、要素には適用されません。... inputmode
Tgr

2
@ Tgrああ、良いキャッチ。仕様では人々が使用する<input type="text" inputmode="numeric">ことを望んでいるように見えinputmode、テンキーとフルキーボードのどちらが表示されているかを判断するためにモバイルブラウザーを確認する必要があります。どのブラウザーもをサポートしinputmodeていないため、デスクトップブラウザーとモバイルブラウザーでどのように実装されるかわかりません。例:デスクトップブラウザは文字入力を許可し<input type="text" inputmode="numeric">ますか?もしそうなら、それは問題です。<input type="number">これを防ぎ、数字のみを許可します。おそらく、ブラウザーが実装を開始するまで待たなければならないため、この回答を更新できます。
Aaron Grey

2
のサポートtype="number"まともですが、クレジットカード番号などではあまり意味のないスピナーが表示される場合があります。
Tgr 2016年

2
。入力が無効である場合、あなたはJSでの入力の値を取得することができなくなりますタイプを持つ=「数」は(お尻Xの痛みである、あなたはなど、カーソルの位置を取得することはできません
NICUをスルドゥ

2
This attribute applies when the value of the type attribute is text, search, tel, url, email, or password, otherwise it is ignored.
Michael Laffargue、

61

私は、少なくとも「パスコード」のようなフィールドの場合、のようなことを行うと、最終的に<input type="tel" />最も信頼性の高い数値指向のフィールドが生成され、オートフォーマットないという利点もあることがわかりました。たとえば、最近ヒルトン用に開発したモバイルアプリケーションでは、次のようにしてしまいました。

オートフォーマットされ、やや直感的でない入力設定を持つタイプ番号とは対照的に、非常にまともな数値キーボードを生成するTELタイプの入力タグを持つiPhone Webアプリケーションディスプレイ

...そして私のクライアントは非常に感銘を受けました。

<form>
  <input type="tel" />
  <button type="submit">Submit</button>
</form>


4
私にとっての問題は、自動フォーマットではなく、検証でした。タイプの入力はnumber、多くのブラウザで数の厳密なルールを強制します。ユーザーがスペース(またはコンマ)を追加して数千を区切る場合、入力から値が得られません。はい、JavaScriptでもinput.value空になります。タイプの入力はtel特定の形式に制限されないため、ユーザーは何でも入力でき、検証は別のプロセスです(開発者が処理するため)。
木の実

このキーボードで10進数を使用する方法
Anto

11

type="email"またはtype="url"を使用すると、少なくともiPhoneなどの一部の電話でキーボードが表示されます。電話番号については、を使用できますtype="tel"


9

を使用<input type="text" pattern="\d*">して数字キーボードを表示するのは危険です。FirefoxとChromeでは、パターン内に含まれる正規表現により、ブラウザはその表現への入力を検証します。パターンと一致しないか、空白のままにすると、エラーが発生します。他のブラウザでの意図しないアクションに注意してください。


6
novalidate包含に属性を追加するform elementと、自動検証の問題に対処できます。必ず自分で検証を行ってください。
Justus Romijn 2014


4

type="number"セマンティックWebページに最適だと思います。キーボードを変更するだけの場合は、type="number"またはを使用できますtype="tel"。どちらの場合も、iPhoneはユーザー入力を制限しません。ユーザーは必要な文字を入力(または貼り付け)できます。唯一の変更は、ユーザーに表示されるキーボードです。これ以上の制限が必要な場合は、JavaScriptを使用する必要があります。


8
私が抱えている問題は、type = "number"は浮動小数点数のみを対象としているため、クレジットカード、郵便番号、または他の多数の文字列だけではないということです。私はそれをエンコードする意味的な方法と正しいキーボードディスプレイを作ることの両方があることを望んでいました。適切なタイプは入力type = "text"ですが、間違ったキーボードが表示されると思います。あなたが私にそれをするためにいくつかのJavaScriptを指すことができれば、それは両方の問題を解決するでしょう。
Tami

2
type="number"フロート用です。type="text"文字列用です。本当に欲しいのは整数です。floatはstringよりもintegerに近いと思います。どう思いますか?
Cat Chen

6
type = "number"で注意すべきことの1つは、Chromeは少なくとも入力を数値にすることを強制することです。これにより、スペースで入力されたクレジットカード番号が壊れます(たとえば)
John Carter '27

8
@therefromhere郵便番号ものように01920なり1920ます。
ceejayoz 2013

それ意志もめちゃくちゃにユーザーが自分のブラウザで異なる言語の設定している場合stackoverflow.com/questions/5345095/...
dalore

4

私にとって最良の解決策は:

整数の場合、AndroidとiPhoneで0-9パッドが表示されます

<label for="ting">
<input id="ting" name="ting" type="number" pattern="[\d]*" />

また、Firefox / chrome / safariのスピナーを非表示にするためにこれを実行することもできます。ほとんどのクライアントは醜く見えると思います

 input[type=number]::-webkit-inner-spin-button,
 input[type=number]::-webkit-outer-spin-button {
      -webkit-appearance: none;
      margin: 0;
 }

 input[type=number] {
      -moz-appearance:textfield;
 }

カスタム検証を行う場合は、フォーム要素にnovalidate = 'novalidate'を追加します

結局のところ、結局のところ浮動小数点数が実際に必要な場合に備えて、好きな精度でステップを実行すると、「。」が追加されます。アンドロイドへ

<label for="ting">
<input id="ting" name="ting" type="number" pattern="[\d\.]*" step="0.01" />


0

あなたはこのように試すことができます:

<input type="number" name="input">
<input type="submit" value="Next" formnovalidate="formnovalidate">

ただし、注意してください。入力に数値以外のものが含まれている場合は、サーバーに送信されません。


0

すべての状況で最適なタイプを見つけることができませんでした。デフォルトで数値エントリ(たとえば、「7.5」のエントリ)に設定する必要がありましたが、特定の時間にテキスト(たとえば、「pass」)を許可しました。ユーザーは数字キーパッド(たとえば7.5の入力)を望んでいましたが、時々テキスト入力が必要でした(たとえば「パス」)。

むしろ、フォームにチェックボックスを追加して、ユーザーが入力(id = "inputSresult")をtype = "number"とtype = "text"の間で切り替えられるようにすることでした。

<input type="number" id="result"... >
<label><input id="cbAllowTextResults" type="checkbox" ...>Allow entry of text results.</label>

次に、クリックハンドラーをチェックボックスに接続し、上のチェックボックスがオンになっているかどうかに基づいて、テキストと数値の間でタイプを切り替えます。

$(document).ready(function () {
    var cb = document.getElementById('cbAllowTextResults');
    cb.onclick = function (event) {
        if ($("#cbAllowTextResults").is(":checked"))
            $("#result").attr("type", "text");
        else
            $("#result").attr("type", "number");

    }
});

これはうまくいきました。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.