2009-10-28 5 views
1

pourriez-vous jeter un oeil à ce http://jsbin.com/osolo/ s'il vous plaît? Si vous entrez une lettre au format Min Age plutôt qu'un nombre, cliquez sur soumettre pour valider avec jquery validator en utilisant 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.jQuery Validator méthode personnalisée

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 

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

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

je voudrais utiliser

data.validateOptions.message 

comme le message d'erreur à partir de la méthode personnalisée, quelqu'un peut me diriger dans la bonne direction s'il vous plaît?

Merci

OneShot

Répondre

1

Je pense que la réponse d'Alex ne fonctionnera pas parce que 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 juste une chaîne de message) et qu'une fonction renvoie le message, vous pouvez passer la fonction en tant que troisième argument de l'appel addmethod. Comme ceci:

(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); 
})(); 
0

Qu'en est-il créer 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 que le message, ne serait pas le message être juste transmise par référence?

Questions connexes