iPhone/ iOS: présentation du clavier HTML 5 pour les Codes postaux

il existe plusieurs astuces pour afficher différents claviers sur les appareils mobiles pour les entrées HTML 5 (i.e. <input> tags).

par exemple, certains sont documentés sur le site Web D'Apple, configurer le clavier pour les vues Web .

enter image description here enter image description here

ceux-ci sont grands pour la convivialité, mais quand il s'agit d'une entrée pour les codes postaux internationaux (la plupart du temps numérique, mais les lettres permises), nous sommes laissés avec quelques options pauvres. La plupart des gens recommandent d'utiliser le pattern="d*" pour afficher le clavier numérique, mais cela ne permet pas l'entrée de lettre.

le type d'entrée type="number" montre le clavier régulier mais décalé à la disposition numérique:

enter image description here

cela fonctionne bien pour les appareils iOS, mais cela fait penser à Chrome que L'entrée doit être un nombre et même modifie le comportement de l'entrée (incrément haut/bas et décrément de la valeur).

enter image description here

y a-t-il un moyen d'obtenir iOS par défaut à la disposition numérique, mais permet quand même l'entrée alphanumérique?

fondamentalement, je veux le comportement iOS pour type="number" mais je veux que le champ se comporte comme un champ de texte régulier sur les navigateurs de bureau. Est-ce possible?

mise à jour:

renifler l'agent-utilisateur pour iOS et utiliser le type d'entrée type="number" n'est pas une option. type="number" n'est pas conçu pour les valeurs de chaîne (comme les codes postaux), et il a d'autres effets secondaires (Comme enlever les zéros de tête, les délimiteurs de virgule, etc) qui le rendent moins idéal pour les codes postaux.

53
demandé sur Ryan McGeary 2014-08-21 15:27:48

7 réponses

est-ce que ça va marcher?

HTML:

<input type="tel" pattern="[0-9]*" novalidate>

cela devrait vous donner le clavier numérique agréable sur Android/iOS navigateurs téléphoniques, désactiver la validation de formulaire de navigateur sur les navigateurs de bureau, ne pas montrer de tourneurs de flèche, permet zéros de tête, et permet des virgules et des lettres sur les navigateurs de bureau, ainsi que sur iPad.

Android / iOS phones:

enter image description here

bureau:

enter image description here

iPad:

enter image description here

26
répondu Aaron Gray 2016-06-02 20:09:55

Une rapide recherche sur google trouvé ce Stackoverflow question .

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

le type d'entrée est commuté avant que la forme puisse être validée, montrant le clavier correct sans gâcher la valeur. Si vous voulez seulement qu'il tourne sur iOS, vous devrez probablement utiliser l'agent utilisateur.

Stackoverflow sur la détection iOS

9
répondu seaside98 2017-05-23 12:18:16
Les navigateurs

n'ont actuellement aucune façon appropriée de représenter les codes numériques comme les codes postaux et les numéros de carte de crédit. La meilleure solution est d'utiliser des type='tel' qui vous donnera un pavé numérique et la possibilité d'ajouter n'importe quel personnage de bureau.

Type text et pattern='/d' vous donnera un pavé numérique, mais uniquement sur iOS.

il y a un HTML5.1 proposition d'un attribut appelé inputmode qui vous permettrait pour spécifier le clavier quel que soit le type. Toutefois pas n'est actuellement pris en charge par aucun navigateur.

je recommande également d'avoir un regard sur le Webshim bibliothèque polyfill qui a un méthode polyfill pour ces types d'entrées.

8
répondu davidelrizzo 2018-07-17 21:34:43

cela fera le côté numérique de l'écran du clavier ios par défaut et maintient la possibilité de passer au côté alphabétique. Lorsque le type d'entrée html change, l'appareil change le clavier pour correspondre au type approprié.

(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

enter image description here


Démo alternative: http://jsfiddle.net/davidcondrey/dbg1L0c0/3/embedded/result /

si vous voulez le clavier grand format numérique (le style de téléphone) vous pouvez ajuster le code en conséquence et il fonctionne toujours:

(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

enter image description here

5
répondu davidcondrey 2014-09-01 05:53:31

mise à jour de cette question dans iOS 11. Vous pouvez obtenir le clavier numérique en ajoutant simplement l'attribut pattern ( pattern="[0-9]*" ) à n'importe quelle entrée avec un type de nombre.

les travaux suivants comme prévu.

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

ça marche aussi.

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

@davidelrizzo a posté une partie de la réponse, mais les commentaires de @Miguel Guardo et @turibe donnent une image plus complète mais sont faciles à manquer.

1
répondu Mark Tomlin 2017-11-06 04:55:24

essayez ceci:

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

je sais que c'est une façon très macabre, mais apparemment ça marche.

Je n'ai pas testé les appareils Android.

Note Ceci peut causer un petit problème quand $this.attr('type', 'number') parce que cela réinitialise la valeur quand input a des caractères non numériques.

idées de Base sont volés de la cette réponse :)

0
répondu rintaro 2017-05-23 10:31:33

pourquoi ne pas vérifier l'en-tête de la requête HTTP (user agent), et servir la disposition numérique aux périphériques iOS, tout en servant la disposition alphanumérique au reste?

-1
répondu Jeremiah Jinno 2014-08-26 00:22:51