110 votes

Comment forcer le clavier avec les chiffres dans un site web mobile sous Android ?

J'ai un site Web mobile et il a quelques HTML input des éléments dedans, comme ceci :

<input type="text" name="txtAccessoryCost" size="6" />

J'ai intégré le site dans un WebView pour une éventuelle consommation d'Android 2.1, de sorte qu'il s'agira également d'une application Android.

Est-il possible d'obtenir le clavier avec des chiffres au lieu du clavier par défaut avec des lettres lorsque ce HTML input L'élément est ciblé ?

Ou bien, est-il possible de le définir pour l'ensemble de l'application (peut-être quelque chose dans la section le fichier Manifest ), si ce n'est pas possible pour un élément HTML ?

0 votes

Si vous voulez un clavier numérique sur iOS en plus d'Android, vous devriez faire ceci : stackoverflow.com/a/31619311/806956

2 votes

El inputmode="number" L'attribut semble être la bonne réponse à la fin de 2019 : developer.mozilla.org/fr/US/docs/Web/HTML/Global_attributes/ . La réponse la plus votée au moment de ce commentaire propose type="number" ce qui n'est pas sans poser quelques problèmes ; inputmode semble avoir un impact uniquement sur l'affichage du clavier virtuel, plutôt que sur le comportement/les contraintes de l'entrée elle-même.

125voto

Richard Kernahan Points 381
<input type="number" />
<input type="tel" />

Tous deux présentent le clavier numérique lorsque l'entrée est mise en évidence.

<input type="search" /> montre un clavier normal avec un bouton de recherche supplémentaire

Tout le reste semble faire apparaître le clavier standard.

0 votes

Je vais y jeter un coup d'œil aujourd'hui, et je vous dirai ensuite si cela fonctionne. Merci, Richard !

1 votes

Bonjour Richard. Rien n'a fonctionné, le champ de saisie ouvre toujours le clavier standard.

1 votes

53voto

user907860 Points 1758

NOTE IMPORTANTE

Je poste ceci en tant que réponse, et non en tant que commentaire, car il s'agit d'une information plutôt importante et elle attirera davantage l'attention dans ce format.

Comme d'autres collègues l'ont fait remarquer, vous pouvez forcer un appareil à vous montrer un clavier numérique avec type="number" / type="tel" mais je dois souligner que vous devez être extrêmement prudent avec ça.

Si quelqu'un s'attend à un nombre commençant par des zéros, tel que 000222 alors elle risque d'avoir des problèmes, car certains navigateurs (Chrome de bureau, par exemple) envoient au serveur 222 ce qui n'est pas ce qu'elle veut.

À propos de type="tel" Je ne peux rien dire de semblable mais personnellement je ne l'utilise pas, car son comportement sur différents téléphones peut varier. Je me suis limité à la simple pattern="[0-9]*" qui ne fonctionnent pas sous Android

5 votes

Le reformatage automatique ne se produit probablement pas avec type="tel" . La spécification note que tel n'impose pas de syntaxe particulière, contrairement à number qui exige que sa valeur soit un nombre flottant valide .

0 votes

Quelle est la gravité de la situation ? Nous essayons d'accélérer le processus de formulaire pour nos clients mobiles et cela semble être une solution évidente, mais nous voulons aussi quelque chose de fiable. Vous avez publié un avertissement fort contre l'utilisation de cette méthode. Pourriez-vous nous en dire un peu plus à ce sujet ?

1 votes

@Philll_t, un utilisateur doit envoyer des données '000222', mais vous, du côté du serveur, obtenez '222' à la place. Ne voyez-vous pas que cette fonctionnalité est complètement cassée ? Le serveur reçoit des données erronées.

26voto

Reza Ghorbani Points 616

inputmode en fonction de Spécification du WHATWG est la méthode par défaut.

Pour les appareils iOS, ajouter pattern pourrait aussi aider.

Pour la compatibilité ascendante, utilisez type également, puisque Chrome les utilise depuis la version 66.

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

9voto

Lauer Points 735

Cela devrait fonctionner. Mais j'ai les mêmes problèmes sur un téléphone Android.

<input type="number" /> <input type="tel" />

J'ai découvert que si je n'incluais pas le jquerymobile-framework, le clavier s'affichait correctement sur les deux types de champs.

Mais je n'ai pas trouvé de solution pour résoudre ce problème, si vous avez vraiment besoin d'utiliser jquerymobile.

UPDATE : J'ai découvert que si la balise de formulaire est stockée en dehors de l'espace de travail de l'utilisateur.

<div data-role="page"> 

Le clavier numérique n'est pas affiché. Ce doit être un bug...

0 votes

Merci d'avoir creusé cette question. Je ne suis pas sûr de comprendre : "si le form-tag est stocké en dehors de la div[data-role=page]". Dans mon cas, le problème se produit avec des formulaires qui sont joliment imbriqués à l'intérieur d'un div[data-role=page]. Peut-être le problème est-il dû au fait que ces pages sont affichées, dans mon cas, comme des boîtes de dialogue ?

3voto

Ali Sheikhpour Points 5018

Certains navigateurs n'envoient pas de zéro au serveur lorsque le type de saisie est "nombre". J'utilise donc un mélange de jquery et de html pour charger un clavier numérique et m'assurer que la valeur est envoyée comme un texte et non comme un nombre :

$(document).ready(function(){
$(".numberonly").focus(function(){$(this).attr("type","number")});
$(".numberonly").blur(function(){$(this).attr("type","text")});
})

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numberonly">

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