2011-10-28 6 views
5

J'utilise le jQuery Validation plugin« numéro: true » champ est obligatoire dans la validation jquery

Je veux un de mes champs à un certain nombre, mais pas un champ obligatoire. Le fait est que lorsque je règle number: true, le champ est requis. Pourquoi donc? J'ai essayé d'ajouter required: false avec number: true, mais en vain.

Ce mon code:

name : { 
    required:false, 
    number:true 
} 

Je ne déclenchaient pas un message d'erreur, mais il affiche le message d'erreur par défaut: « S'il vous plaît entrer un numéro valide. »

+0

Le problème est que la chaîne vide est pas un nombre valide. Je ne connais pas assez ce plugin pour savoir comment obtenir le comportement (parfaitement raisonnable) que vous voulez. – Pointy

+0

Check [cette démo] [1] [1]: http://docs.jquery.com/Plugins/Validation/Methods/number changement ** requis ** false et devrait être ok, plus vous peut montrer votre code HTML pour plus d'informations. – Min2liz

Répondre

6

Dans le code source qu'ils utilisent cette regex pour valider un numéro:

/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/ 

Lorsque le champ est vide (""), il ne passe pas le test:

/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test("") 
//false 
3

Vous pourriez essayer d'écrire votre propre validateur. Ce n'est pas trop dur. Quelque chose comme:

$.validator.addMethod 
(
    "number2", 
    function (value, element) 
    { 
     // Remove numberish characters. 
     value = value.replace("$", "").replace(",", ""); 

     // A regex might be better but this works too. 
     if (!isNaN(parseFloat(value))) 
     { 
      $(element).val(parseFloat(value)); 
      return true; 
     } 
     else if (value === "") // handle empty value 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    }, 
    "Numeric only." 
); 

Ensuite, appliquer la règle, par exemple:

$.validator.addClassRules("numeric", { number2: true }); 

Une variante de ce thème peut être appliqué en entier ou des valeurs monétaires et, bien sûr, vous pourriez obtenir assez complexe avec validation et "nettoyage" des données.

0

Il fonctionne très bien la cause il y a une substance supplémentaire dans la méthode interne qui doit être ajouter dans la méthode personnalisée:

// http://docs.jquery.com/Plugins/Validation/Methods/number 
number: function(value, element) { 
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value); 
}, 

Avis this.optional(element) ||

vous devez ajouter cela sur votre méthode personnalisée pour obtenir le travail fait sur commande correctement quand pas nécessaire

par la façon dont merci pour cet article, qui m'a vu la manière de trouver ceci.

0

Vous devez utiliser <input> avec type attribut est égal à text, non number:

<input type="text" id="phone" name="phone" /> 
Questions connexes