Téléphone: clavier numérique pour l'entrée de texte

y a-t-il un moyen de forcer le clavier à venir au téléphone pour un <input type="text"> ? Je viens de réaliser que <input type="number"> dans HTML5 est pour les "nombres à virgule flottante", donc il n'est pas adapté pour les numéros de carte de crédit, codes ZIP, etc.

je veux imiter la fonctionnalité de clavier numérique de <input type="number"> , pour les entrées qui prennent des valeurs numériques Autres que des nombres à virgule flottante. Existe-t-il, peut-être, un autre type approprié de input ça fait ça?

137
demandé sur Vadim Kotov 2011-05-30 20:16:46

10 réponses

vous pouvez faire <input type="text" pattern="\d*"> . Cela va entraîner le clavier numérique à apparaître.

Voir ici pour plus de détails: du Texte, le Web et l'Édition de Guide de Programmation pour iOS

179
répondu Seth Stone 2013-02-12 19:11:53

à partir de mi-2015, je crois que c'est la meilleure solution:

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

cela vous donnera le clavier numérique sur Android et iOS:

enter image description here

il vous donne également le comportement de bureau prévu avec les boutons Flèche Haut/Bas et clavier conviviale Flèche Haut/Bas touche incrementing:

enter image description here

en combinant à la fois type="number" et pattern="[0-9]* , nous obtenons une solution qui fonctionne partout. Et, son forward compatible avec le futur attribut HTML 5.1 proposé inputmode .

Note: L'utilisation d'un motif déclenche la validation du formulaire natif du navigateur. Vous pouvez désactiver cela en utilisant l'attribut novalidate , ou vous pouvez personnaliser le message d'erreur pour une validation échouée en utilisant l'attribut title .


si vous devez être en mesure d'entrer des zéros, des virgules ou des lettres - par exemple, les codes postaux internationaux - cochez cette variante légère .


crédits et lectures complémentaires:

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

105
répondu Aaron Gray 2017-05-23 11:54:56

j'ai trouvé que, au moins pour"passcode "-comme les champs, faire quelque chose comme <input type="tel" /> finit par produire le plus authentique nombre - domaine orienté et il a également le bénéfice de pas d'autoformatting . Par exemple, dans une application mobile que j'ai développée pour Hilton récemment, j'ai fini par aller avec ceci:

iPhone Web Application Display with an Input Tag Having a Type of TEL which Produces a very Decent Numeric Keyboard as Opposed to Type Number which is Autoformatted and Has a Somewhat Less Intuitive Input Configuration

... et mon client était très impressionné.

49
répondu Gabriel Ryan Nahmias 2012-07-19 21:29:58

en utilisant le type="email" ou type="url" vous donnera un clavier sur certains téléphones au moins, tels que l'iPhone. Pour les numéros de téléphone, vous pouvez utiliser type="tel" .

11
répondu Niklas 2011-05-30 16:25:01

il y a un danger à utiliser le <input type="text" pattern="\d*"> pour élever le clavier numérique. Sur firefox et chrome, l'expression régulière contenue dans le pattern permet au navigateur de valider l'entrée de cette expression. erreurs se produisent si elle ne correspond pas au modèle ou est laissé vide. Soyez conscient des actions involontaires dans d'autres navigateurs.

8
répondu Mike 2013-03-18 15:44:07

je pense que type="number" est le meilleur pour la page Web sémantique. Si vous voulez juste changer le clavier, vous pouvez utiliser type="number" ou type="tel" . Dans les deux cas, iPhone ne restreint pas l'entrée de l'utilisateur. L'utilisateur peut toujours taper (ou coller) les caractères qu'il / elle veut. Le seul changement est le clavier affiché à l'utilisateur. Si vous voulez une restriction au-delà de cela, vous devez utiliser JavaScript.

4
répondu Cat Chen 2011-06-01 12:12:00

pour moi, la meilleure solution était:

pour les nombres entiers, qui apporte le bloc 0-9 sur android et iphone

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

vous pouvez aussi vouloir faire cela pour cacher les fileurs dans firefox / chrome / safari, la plupart des clients pensent qu'ils ont l'air moche

 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;
 }

et ajouter novalidate= 'novalidate' à votre élément de formulaire, si vous faites une validation personnalisée

Ps juste au cas où vous vouliez vraiment flotter les nombres de points après tout, un pas à n'importe quelle précision que vous voulez, ajoutera '."pour android

<label for="ting">
<input id="ting" name="ting" type="number" pattern="[\d\.]*" step="0.01" />
3
répondu aqm 2015-02-26 09:36:44

en 2018:

<input type="number" pattern="\d*">

fonctionne pour Android et iOS.

j'ai testé sur Android (^4.2) et iOS (11.3)

1
répondu Shalika Akalanka 2018-05-15 05:16:00

vous pouvez essayer comme ceci:

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

Mais attention: Si votre entrée contient autre chose qu'un nombre, il ne sera pas transmis au serveur.

0
répondu alexwenzel 2015-01-20 10:33:54

Je ne pouvais pas trouver un type qui fonctionnait le mieux pour moi dans toutes les situations: je devais par défaut à l'entrée numérique (entrée de" 7.5"par exemple) mais aussi à certains moments permettent le texte ("passer" par exemple). Les utilisateurs voulaient un clavier numérique (entrée de 7,5 par exemple), mais une entrée de texte occasionnelle était nécessaire ("passer" par exemple).

plutôt ce que j'ai fait était d'ajouter une case à cocher à la forme et permettre à l'utilisateur de basculer mon entrée (id= "inputSresult") entre le type= "nombre" et type="texte".

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

puis j'ai câblé un gestionnaire de clic à la case à cocher qui bascule le type entre le texte et le numéro en fonction de si la case à cocher ci-dessus est cochée:

$(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");

    }
});

Cela a bien fonctionné pour nous.

0
répondu Jeff Mergler 2016-06-13 21:05:30