2009-06-10 6 views
18

J'ai créé une méthode pour le plugin validateur de jquery, qui fonctionne comme la règle distante. La différence est que je voudrais afficher un message d'erreur dynamique (basé sur la réponse ajax).jquery validateur addmethod message personnalisé

jQuery.validator.addMethod("duplicate", function(value, element, params) { 
    var object_settings = this.settings; 
    params.data[$(element).attr("name")] = value; 
    $.post(params.url, params.data, function(response) { 
     if (response == 'true'){ return true; } 
     else { 
      object_settings.messages[element.name] = response; 
      return false; 
     } 
    }, 'text'); 
}, ''); 

Il fonctionne ... en quelque sorte .... il définit le message, mais ne l'affiche pas d'abord (si vous validez le champ une seconde fois, le message est affiché).

Des suggestions?

(peut-être la règle à distance offre cette fonctionnalité ... Je ne pouvais pas trouver quoi que ce soit dans la documentation)

Répondre

15

est ici la solution .... nécessaire pour appeler la fonction ShowErrors de l'objet:

jQuery.validator.addMethod("duplicate", function(value, element, params) { 
    var validator = this; 
    params.data[element.name] = value; 
    $.post(params.url, params.data, function(response) { 
     if (response == 'true'){ return true; } 
     else { 
      var errors = {}; 
      errors[element.name] = response; 
      validator.showErrors(errors); 
      return false; 
     } 
    }, 'text'); 
}, ''); 

Tiré de "distance" dans jquery.validate.js (lignes 917 - 919)

+4

Le message d'erreur par défaut remplace l'écriture du message personnalisé lorsque je le fais. – aqs

9

cherchait une solution à cela aussi, et trouvé cela ...

dans l'ex d'origine ample, si vous changez cette ligne:

object_settings.messages[element.name] = response; 

à ceci:

$.validator.messages.duplicate = response; 

Cela fonctionne pour moi. Je l'ai trouvé ici: http://blogs.teamb.com/craigstuntz/2009/01/15/37923/

+0

+1 Semble mieux qu'appeler 'showErrors' –

6

J'ai suivi le processus mentionné dans le site http://blogs.teamb.com/craigstuntz/2009/01/15/37923/#comment-125774 et réussi.

Vous devez appeler la méthode avec le message dynamique, afin qu'il affiche ce message. Par exemple

$.validator.addMethod("validatePremium", function(value, element, param) { 

    if(Condition)  

    { 
     $.validator.messages.validatePremium = "your message here"; 
     //enter code here 
     //... 
     return false; 
    } 

    }, $.validator.messages.validatePremium); 
3

cela a fonctionné pour moi

var errorMsg = '', $valid = false; 
$.validator.addMethod("methodName",function(val, elem){ 
    $.ajax({ 
     url:'your_script.php', 
     type:"POST", 
     dataType:"json", 
     data : {}, 
     success:function(response){ 
     if(response.success == false){ 
      errorMsg = response.msg; 
      $valid = response.success; 
     } 
     else{ 
      $valid = true; 
     } 
     } 
    }); 
    $.validator.messages["methodName"] = errorMsg; 
    return $valid; 
},''); 

assurez-vous de remplacer « methodName » avec votre nom de la méthode dans ce cas « double » dans les deux lieux (fonction addMethod 1er arg et dans le corps de la fonction addMethod $ .validator.messages ["methodName"])

Questions connexes