HTML 5入力(つまり<input>
タグ)のモバイルデバイスに異なるキーボードを表示するためのいくつかのトリックがあります。
たとえば、一部はAppleのWebサイトに記載されています Webビュー用のキーボードの構成 。
これらは使いやすさには優れていますが、国際郵便番号(ほとんどが数字ですが、文字は許可されています)の入力に関しては、いくつかの貧弱なオプションが残っています。ほとんどの人はpattern="\d*"
トリックを使用して数字キーボードを表示することをお勧めしますが、文字入力はできません。
type="number"
入力タイプは通常のキーボードを表示しますが、数値レイアウトにシフトします。
これはiOSデバイスではうまく機能しますが、Chromeは入力が数字でなければならないと考え、入力の動作(値の増減)さえも変更します。
iOSをデフォルトで数値レイアウトに設定する方法はありますが、それでも英数字入力は許可されますか?
基本的に、type="number"
のiOSの動作が必要ですが、デスクトップブラウザーの通常のテキストフィールドのように動作するフィールドが必要です。これは可能ですか?
UPDATE:
IOSのユーザーエージェントをスニッフィングし、type="number"
入力タイプを使用することはオプションではありません。 type="number"
は、郵便番号などの文字列値用ではなく、郵便番号にとって理想的ではない他の副作用(先行ゼロの削除、コンマ区切り文字など)があります。
ブラウザには現在、郵便番号やクレジットカード番号などの数値コードを表す適切な方法がありません。最良の解決策は、type='tel'
を使用することです。これにより、数字キーパッドが使用でき、デスクトップに任意の文字を追加できます。
タイプtext
およびpattern='/d'
は、数字キーパッドを提供しますが、iOSのみです。
inputmode
と呼ばれる属性のHTML5.1提案があり、タイプに関係なくキーパッドを指定できます。ただし、現在、どのブラウザでもサポートされていません。
これらのタイプの入力に対して Webshim polyfillライブラリに polyfillメソッド があることもお勧めします。
クイックGoogle検索が見つかりました このStackoverflowの質問 。
HTML
<input type="text">
Javascript
$('input[type="text"]').on('touchstart', function() {
$(this).attr('type', 'number');
});
$('input[type="text"]').on('keydown blur', function() {
$(this).attr('type', 'text');
});
フォームが検証される前に入力タイプが切り替えられ、値を台無しにすることなく正しいキーボードが表示されます。 iOSでのみ実行する場合は、おそらくユーザーエージェントを使用する必要があります。
これにより、デフォルトでiosキーボードの数字側が表示され、アルファベット側に切り替える機能が維持されます。 html入力タイプが変更されると、デバイスは適切なタイプに一致するようにキーボードを変更します。
(function ($) {
var control = $('#test2');
var field = $('#test1');
control.bind('click', function () {
if (control.is(':checked')) {
field.attr('type', 'text');
} else {
field.attr('type', 'number');
}
})
}(jQuery));
<input type="number" id="test1" value="123" />
<input id="test2" type="checkbox" />Change
代替デモ: http://jsfiddle.net/davidcondrey/dbg1L0c0/3/embedded/result/
大きな数値形式のキーボード(電話スタイル)が必要な場合は、それに応じてコードを調整できますが、引き続き機能します。
(function ($) {
var control = $('#test2');
var field = $('#test1');
control.bind('click', function () {
if (control.is(':checked')) {
field.attr('type', 'text');
} else {
field.attr('type', 'tel');
}
})
}(jQuery));
<input type="tel" id="test1" value="a" />
<input id="test2" type="checkbox" />Change
IOS 11におけるこの質問の更新。数字タイプの入力にパターン属性(pattern="[0-9]*"
)を追加するだけで、数字キーパッドを取得できます。
以下は期待どおりに機能します。
<input type="number" pattern="[0-9]*">
これも機能します。
<input type="number" pattern="\d*">
@davidelrizzoは回答の一部を投稿しましたが、@ Miguel Guardoと@turibeのコメントは全体像を示していますが、見逃しがちです。
これを試して:
<input type="text" name="postalcode" class="js-postal">
<script src="https://code.jquery.com/jquery-2.1.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
if('ontouchstart' in window) { // ensure we are in touch device.
$('input.js-postal').on('focus', function() {
var $this = $(this);
// memorize current value because...
var val = $this.val();
// this may cause reset value.
$this.attr('type', 'number');
setTimeout(function() {
// Asynchronously restore 'type' and value
$this.attr('type', 'text');
$this.val(val);
}, 0);
});
}
});
</script>
私はこれが非常にハック的な方法であることを知っていますが、これは明らかに動作します。
ただし、Androidデバイスではテストしていません。
これは、input
に数字以外の文字が含まれている場合に値をリセットするため、$this.attr('type', 'number')
の場合に少し顕著なグリッチが発生する可能性があることに注意してください。
この答え :)から基本的なアイデアが盗まれます