Quelle est la meilleure façon de restreindre la saisie "numérique" uniquement pour les zones de texte?
Je cherche quelque chose qui permette des décimales.
Je vois beaucoup d'exemples. Mais je n'ai pas encore décidé lequel utiliser.
Mise à jour de Praveen Jeganathan
Plus de plugins, jQuery a implémenté le sien jQuery.isNumeric()
ajouté dans la v1.7. Voir: https://stackoverflow.com/a/20186188/66767
jquery
validation
isnumeric
wenbert
la source
la source
Réponses:
Mettre à jour
Il existe une solution nouvelle et très simple pour cela:
Consultez cette réponse ou essayez-la vous-même sur JSFiddle .
plugin jquery.numeric
J'ai réussi à implémenter de nombreux formulaires avec le plugin jquery.numeric .
De plus, cela fonctionne également avec les zones de texte!
Cependant, notez que Ctrl + A, Copier + Coller (via le menu contextuel) et Glisser + Déposer ne fonctionneront pas comme prévu.
HTML 5
Avec une prise en charge plus large de la norme HTML 5, nous pouvons utiliser l'
pattern
attribut et lenumber
type pour lesinput
éléments pour restreindre la saisie uniquement numérique. Dans certains navigateurs (notamment Google Chrome), cela fonctionne également pour restreindre le collage de contenu non numérique. Plus d'informations surnumber
et d'autres types d'entrée plus récents sont disponibles ici .la source
allowDecimal
option pour chaque fois que je veux seulement autoriser des valeurs entières .. la source est très simple et bien écrite.type="number"
.Si vous souhaitez restreindre l'entrée (par opposition à la validation), vous pouvez travailler avec les événements clés. quelque chose comme ça:
Et:
Cela permet immédiatement à l'utilisateur de savoir qu'il ne peut pas saisir de caractères alpha, etc. plutôt que plus tard pendant la phase de validation.
Vous voudrez toujours valider car l'entrée peut être remplie en coupant et collant avec la souris ou éventuellement par un autocompléteur de formulaire qui peut ne pas déclencher les événements clés.
la source
$doc.on('keyup blur input propertychange', 'input[name="price"]', function(){$(this).val($(this).val().replace(/[^0-9\.]/g,''));});
Je pensais que la meilleure réponse était celle ci-dessus pour le faire.
mais je conviens que c'est un peu pénible que les touches fléchées et le bouton supprimer accrochent le curseur à la fin de la chaîne (et à cause de cela, il m'a été renvoyé lors des tests)
J'ai ajouté dans un simple changement
de cette façon, s'il y a un bouton qui ne provoquera pas la modification du texte, ignorez-le. Avec cela, vous pouvez appuyer sur des flèches et supprimer sans sauter à la fin, mais cela efface tout texte non numérique.
la source
keypress
pourrait être utilisé pour simplifier davantage cela, car apparemmentkeyup
etkeydown
déclencher sur n'importe quelle touche du clavier, alors quekeypress
seuls les déclencheurs sur les touches "caractère" (donc ne pas déclencher sur la flèche et supprimer les touches). Voir cette réponse pour référence: stackoverflow.com/a/1367720/1298685Le plugin jquery.numeric a quelques bugs dont j'ai notifié l'auteur. Il permet plusieurs décimales dans Safari et Opera, et vous ne pouvez pas taper de retour arrière, les touches fléchées ou plusieurs autres caractères de contrôle dans Opera. J'avais besoin d'une entrée entière positive, donc j'ai fini par écrire la mienne à la fin.
la source
Plus de plugins, jQuery a implémenté son propre jQuery.isNumeric () ajouté dans la v1.7.
Résultats des échantillons
Voici un exemple de la façon de lier isNumeric () avec l'écouteur d'événement
la source
var v = this.value;
changer envar v = this.value.replace(/,/g,'');
. Des nombres tels que21,345,67.800
sont trop pris en compte.$(document).on('keyup keypress', '#somethingSomething', function(){ var aValue = $(this).val(); if($.isNumeric(aValue) === false){ $(this).val(aValue.slice(0,-1)); } });
Le plugin numeric () mentionné ci-dessus, ne fonctionne pas dans Opera (vous ne pouvez pas revenir en arrière, supprimer ou même utiliser les touches Précédent ou Suivant).
Le code ci-dessous dans JQuery ou Javascript fonctionnera parfaitement (et ce n'est que deux lignes).
JQuery:
Javascript:
Bien sûr, cela concerne uniquement la saisie numérique (plus les touches de retour arrière, de suppression, d'avance / retour) mais peut facilement être modifié pour inclure des points et des caractères moins.
la source
Vous pouvez utiliser le plugin Validation avec sa méthode number () .
la source
Approche Javascript
Approche jQuery
METTRE À JOUR
Les réponses ci-dessus sont pour le cas d'utilisation le plus courant - valider l'entrée en tant que nombre.
la source
Voici ce que j'utilise pour bloquer littéralement les frappes. Cela n'autorise que les chiffres 0-9 et un point décimal. Facile à implémenter, pas beaucoup de code, et fonctionne comme un charme:
la source
charCode != 46
de l'instruction if. Très bonne réponse!Pour améliorer légèrement cette suggestion , vous pouvez utiliser le plug-in de validation avec ses méthodes number () , digits et range . Par exemple, ce qui suit garantit que vous obtenez un entier positif compris entre 0 et 50:
la source
Vous ne voyez pas l'apparence magique et la disparition des alphabets sur la touche enfoncée. Cela fonctionne aussi sur la pâte de souris.
la source
/[^0-9.]/g
J'ai d'abord essayé de résoudre ce problème à l'aide de jQuery, mais je n'étais pas content que des caractères indésirables (non numériques) apparaissent réellement dans le champ de saisie juste avant d'être supprimés lors de la saisie.
En cherchant d'autres solutions, j'ai trouvé ceci:
Entiers (non négatifs)
Source: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Example Exemple en direct: http://jsfiddle.net/u8sZq/
Décimales (non négatives)
Pour autoriser un seul point décimal, vous pouvez faire quelque chose comme ceci:
Source: Je viens d'écrire ceci. Semble fonctionner. Exemple en direct: http://jsfiddle.net/tjBsF/
Autres personnalisations
Certaines choses pourraient vous intéresser:
Lacunes
Je sais que le titre demande des solutions jQuery, mais j'espère que quelqu'un trouvera cela utile de toute façon.
la source
Merci pour le post Dave Aaron Smith
J'ai modifié votre réponse pour accepter le point décimal et les nombres de la section des nombres. Ce travail est parfait pour moi.
la source
Et appliquez ceci sur toutes les entrées que vous souhaitez:
la source
HTML5 prend en charge le numéro de type d'entrée avec une prise en charge globale du navigateur de 88% + selon CanIUse en octobre 2015.
Ce n'est pas une solution liée à JQuery, mais l'avantage est que sur les téléphones mobiles, le clavier Android sera optimisé pour la saisie de nombres.
Alternativement, il est possible d'utiliser du texte de type d'entrée avec le nouveau paramètre "pattern". Plus de détails dans les spécifications HTML5.
Je pense que c'est mieux que la solution jquery, car dans cette question, la solution jquery fournie ne prend pas en charge le séparateur de milliers. Si vous pouvez utiliser html5.
JSFiddle: https://jsfiddle.net/p1ue8qxj/
la source
Cette fonction fait la même chose, utilise certaines des idées ci-dessus.
la source
/ * ceci est ma version multi-navigateur de Comment autoriser uniquement le numérique (0-9) dans la zone de saisie HTML à l'aide de jQuery?
* /
la source
Exécutez simplement le contenu via parseFloat (). Il reviendra
NaN
sur une entrée non valide.la source
Vous pouvez utiliser autoNumeric depuis decorplanit.com . Ils ont un bon support pour le numérique, ainsi que la devise, l'arrondi, etc.
J'ai utilisé dans un environnement IE6, avec quelques réglages CSS, et ce fut un succès raisonnable.
Par exemple, une classe css
numericInput
pourrait être définie et elle pourrait être utilisée pour décorer vos champs avec les masques de saisie numériques.adapté du site autoNumeric:
la source
Je pense que c'est une bonne façon de résoudre ce problème et c'est extrêmement simple:
Exemple: JSFiddle
Scénarios couverts
La plupart des recommandations similaires ici échouent à au moins un de ces problèmes ou nécessitent beaucoup de code pour couvrir tous ces scénarios.
home
,end
et learrow
clés.delete
etbackspace
à utiliser à n'importe quel index.keyup
événement n'est pas utilisé.Les scénarios ont échoué
0.5
et supprimer uniquement le zéro ne fonctionnera pas. Cela peut être résolu en changeant l'expression régulière en/^[0-9]*\.?[0-9]*$/
puis en ajoutant un événement flou pour ajouter un0
lorsque la zone de texte commence par un point décimal (si vous le souhaitez). Consultez ce scénario avancé pour une meilleure idée de la façon de résoudre ce problème.Brancher
J'ai créé ce plugin jquery simple pour rendre cela plus facile:
la source
La meilleure façon consiste à vérifier les contects de la zone de texte chaque fois qu'elle perd le focus.
Vous pouvez vérifier si le contenu est un "nombre" en utilisant une expression régulière.
Ou vous pouvez utiliser le plugin Validation, qui le fait essentiellement automatiquement.
la source
Vérifiez ce code de recherche pour l'utilisation de la base de données:
la source
Ceci est un extrait que je viens de faire (en utilisant une partie du code de Peter Mortensen / Keith Bentrup) pour une validation de pourcentage entier sur un champ de texte (jQuery est requis):
Ce code:
J'espère que cela aide ceux qui en ont besoin.
la source
Trouvé une excellente solution ici http://ajax911.com/numbers-numeric-field-jquery/
Je viens de changer le "keyup" en "keydown" selon mes besoins
la source
Si vous utilisez HTML5, vous n'avez pas besoin d'aller très loin pour effectuer la validation. Utilisez simplement -
L'attribut step permet au point décimal d'être valide.
la source
Autre moyen de conserver la position du curseur sur l'entrée:
Avantages:
Plunker: Démo de travail
la source
Je viens de trouver un plug-in encore meilleur. Vous donne beaucoup plus de contrôle. Supposons que vous ayez un champ DOB où vous avez besoin qu'il soit numérique mais accepte également les caractères "/" ou "-".
Ça marche super!
Découvrez-le sur http://itgroup.com.ph/alphanumeric/ .
la source
Ce code a très bien fonctionné sur moi, j'ai juste dû ajouter le 46 dans le tableau controlKeys pour utiliser la période, bien que je ne pense pas que ce soit la meilleure façon de le faire;)
la source
Je l'ai utilisé, avec de bons résultats ..
la source
C'est très simple, nous avons déjà une fonction intégrée javascript "isNaN".
la source