97 votes

<input type="number"/> n'affiche pas un clavier numérique sur iOS

Selon La documentation d'Apple lorsque je configure un élément d'entrée avec un type de number Je devrais acheter un clavier numérique.

<input type="number"/>

number : Un champ de texte pour spécifier un nombre. Fait apparaître un clavier de pavé numérique dans iOS 3.1 et plus.

C'est presque impossible de faire des erreurs. Cependant, lorsque je visualise ce simple bidouillage sur mon iPhone ou sur le simulateur (tous deux sous iOS6), le clavier numérique n'apparaît pas, et j'obtiens le clavier alphabétique standard à la place.

http://jsfiddle.net/Cy4aC/3/

Qu'est-ce que j'ai bien pu foirer ici ?

enter image description here

175voto

Majid L Points 5467

Vous devez spécifier le modèle :

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

En tant que number peut être négatif ou à virgule flottante, de sorte que l'option - y . y , devrait être disponible dans le clavier, à moins que vous ne spécifiiez un modèle de chiffres seulement.

enter image description here

21voto

Aaron Angle Points 164

A partir d'ios 12.2 (sortie le 25 mars 2019), cette solution fonctionnera et c'est la plus simple à mettre en œuvre.

<input type="number" inputmode="decimal"/>

Cela fera apparaître uniquement le clavier numérique sans les caractères #+* qui viennent avec l'utilisation de input="tel".

5voto

pIkEL Points 96

Je ne suis pas sûr que ce soit ce que vous voulez, mais le type d'entrée = "tel" vous donnera le "pavé numérique du téléphone".

3voto

Derek Henry Points 61

D'après mon expérience, cela n'est pas cohérent d'un navigateur à l'autre. iOS a fait des allers-retours entre la prise en charge correcte de cette fonction et mon cas d'utilisation. En général, je souhaite simplement que le clavier affiché par défaut soit le clavier numérique. La dernière fois que j'ai vérifié, l'utilisation de input type="number" fait apparaître correctement le clavier numérique, mais l'attribut "size" est ignoré, ce qui perturbe gravement mon format mobile. J'ai ajouté un attribut à toutes les entrées que je préférerais que le clavier numérique utilise par défaut, et j'ai utilisé jQuery pour changer tous les attributs (c'est-à-dire type="number") lorsque le navigateur en détecte un qui fonctionne correctement. De cette façon, je n'ai pas besoin de revenir en arrière et de mettre à jour les entrées individuelles et cela me permet de ne l'appliquer que dans les navigateurs pris en charge.

Ce serait bien si les principaux systèmes d'exploitation mobiles avaient un attribut pour le "clavier par défaut" en plus du type de saisie. Que se passe-t-il si un utilisateur saisit une adresse ou un code postal ? Généralement, ces données commencent par des chiffres. Il est donc utile d'afficher le clavier numérique par défaut, tout en autorisant TOUT type de texte.

En ce qui concerne la validation, je ne peux pas compter sur le navigateur pour prendre en charge la validation pour les types d'entrée spécifiques, j'utilise donc le javascript et la validation côté serveur.

1voto

ASPiRE Points 1180

Salutations. Je sais que cette question est ancienne mais je pense que c'est une solution très recherchée et j'ai décidé de poster une réponse.

Voici un solution J'ai créé pour aborder le clavier de l'iPad ainsi qu'à peu près tout.

En outre, cette approche ne vous oblige pas à utiliser une entrée de type nombre ce qui, à mon humble avis, est très laid.

Vous trouverez ci-dessous une version de travail.

Réflexions sur les touches du clavier de l'iPad d'Apple...

J'ai dû créer un gestionnaire d'événement keyPress pour capturer et supprimer les touches de l'iPad qui ne semblent pas être gérées par l'événement keyDown ou qui sont ambiguës ? ??!

// Bind keydown event to all input type=text in form.
$("form input[type=text]").keydown(function (e) {

// Reference to keyCodes...
var key = e.which || e.keyCode;
// Reference to shiftKey...
var shift_key = e.shiftKey;
// Reference to ctrlKey...
var ctrl_key = e.ctrlKey;
// Reference to altKey...
var alt_key = e.altKey;

// When user presses the shiftKey...
if(e.shiftKey) {

//...supress its click and whatever key follows after it.
console.log(e.shiftKey + ' and ' + key + ' supressed.');

// Deny
return false;

// ONLY Allow Numbers, Numberpad, Backspace & Tab
} else if ( (key >= 48 && key <=57) || (key >= 96 && key <=105) || (key >= 8 && key <=9) ) {

// Allow
return true;

} else {

// Deny every other key and/or shift + key combination NOT explicitly declared.
return false;
}

});

// KeyPresss to handle remaining iPAD keyboard keys!
// These keys don't seem to be handled by the keyDown event or are ambiguous???!
// Bind keypress event to all input type=text in form.
$("form input[type=text]").keypress(function (e) {

// Reference to keyCodes...
var key = e.which || e.keyCode;
// Reference to shiftKey...
var shift_key = e.shiftKey;
// Reference to ctrlKey...
var ctrl_key = e.ctrlKey;
// Reference to altKey...
var alt_key = e.altKey;

switch (key) {

// Character -> ^
case 94:
return false;

// Character -> #
case 35:
return false;

// Character -> $
case 36:
return false;

// Character -> @
case 64:
return false;

// Character -> &
case 38:
return false;

// Character -> *
case 42:
return false;

// Character -> (
case 40:
return false;

// Character -> )
case 41:
return false;

// Character -> %
case 37:
return false;

// Character -> !
case 33:
return false;

}

});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form action="">

<label for="text1">Numbers, Numberpad, Backspace & Tab ONLY:</label>
<input id="text1" type="text" placeholder="0" min="0" input pattern="[0-9]*" inputmode="numeric" value="" maxlength="4">

</form>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X