Question

pourriez-vous jeter un coup d'œil à cette http://jsbin.com/osolo/ s'il vous plaît?

Si vous entrez une lettre dans Min Age plutôt qu'un nombre puis que vous cliquez sur soumettre, cela valide l'utilisation de validateur jQuery à l'aide d'une expression régulière dans une méthode de validation personnalisée. Cela fonctionne mais je cherche maintenant à la rendre un peu plus dynamique.

Dans la méthode de validation personnalisée, la ligne

var data = $(element).metadata(); 

saisit les métadonnées de l'élément en cours de validation, ce que je voudrais faire est d'utiliser le

data.validateOptions.regex

en tant que regex à tester avec (je ne vois pas cela comme un problème), ce que je peux voir comme un problème est que si le champ ne valide pas, plutôt que d'utiliser un message fourni lors de l'appel

jQuery.validator.addMethod(name, method, message)

je voudrais utiliser

data.validateOptions.message

En tant que message d'erreur de la méthode personnalisée, quelqu'un peut-il m'indiquer la bonne direction, s'il vous plaît?

Merci

OneShot

Était-ce utile?

La solution

Je pense que la réponse d'Alex ne fonctionnera pas car les chaînes sont immuables dans JS.

C'est proche cependant. En commençant par le code d'Alex, si vous créez une fermeture contenant l'objet de données (ou simplement une chaîne de message) et une fonction renvoyant le message, vous pouvez passer la fonction en tant que troisième argument de l'appel addmethod. Comme si:

(function() {
    var data = {};
    var messager = function() {
        return data.validateOptions.message;
    };
    jQuery.validator.addMethod("perorgproperty", function(value, element) { 
        debugger; 
        //alert('testing perorgproperty'); 
        data = $(element).metadata();
        return this.optional(element) || /^\d+$/i.test(value); 
    }, messager);
})();

Autres conseils

Qu'en est-il de la création d'une fermeture?

var data = {};
jQuery.validator.addMethod("perorgproperty", function(value, element) { 
    debugger; 
    //alert('testing perorgproperty'); 
    data = $(element).metadata(); 

    return this.optional(element) || /^\d+$/i.test(value); 
}, data.validateOptions.message); 

Tant que la fonction est évaluée avant le message, le message ne serait-il pas simplement transmis par référence?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top