2010-06-11 7 views
2

Im en utilisant la validation de jQuery qui se trouve ici: http://docs.jquery.com/Plugins/Validation/rules#.22add.22rulesjQuery Validation: règles de résumés analytiques

J'ai actuellement certaines de mes règles « personnalisées » mis en place comme ceci:

else if(valID =="#shipForm") 
     { 
      $("#fName").rules("add",{regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",minlength: 2,messages:{minlength:"Must be 2 characters."}}); 
      $("#lName").rules("add",{regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",minlength: 2,messages:{minlength:"Must be 2 characters."}}); 
      $("#sAdd1").rules("add",{stringCheck: "",minlength:2,messages:{minlength:"Enter your complete street address."}}); 
      $("#sAdd2").rules("add",{stringCheck: ""}); 
      $("#city").rules("add",{stringCheck: "",minlength:2,messages:{minlength:"Enter the full name of your city"}}); 
      $("#zipcode").rules("add",{stripZip: ""}); 
      $("#phoneIn").rules("add",{stripPhone: "",maxlength:15,messages:{maxlength:"Phone number exceeds allowed length"}}); 
      $("#altPhone").rules("add",{stripPhone: ""}); 
      $("#state").rules("add",{checkMenu: ""}); 
      $("#country").rules("add",{checkMenu: ""}); 
     } 

Ce que j'espérais do .. est en train d'abstraire les .rules et de pouvoir les saisir d'une fonction. Mon problème est qu'ils ne sont pas seulement des chaînes, donc je manque d'idée de comment je pourrais apporter des informations à partir d'une autre fonction et peupler les .rules ("valeur de la règle")

Ceci ne marche pas mais c'est un exemple de quelque chose que j'espérais un peu pour

function getRule(rule) 
{ 
    switch (rule) 
    { 
     case "fName": 
      return "\"add\",{regexName: \"^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$\",minlength: 2,messages:{minlength:\"Must be 2 characters.\"}}"; 
      break; 
    } 
} 

Mais je ne peux pas évidemment passer juste une chaîne en arrière et l'exécuter de nouveau dans les .rules.

Une idée est?

Répondre

1

Vous pouvez retourner un objet

function getRule(rule) 
{ 
    switch (rule) 
    { 
     case "fName": 
      return { 
       param1 : "add", 
       param2 : { 
        regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$", 
        minlength: 2, 
        messages:{ 
         minlength:"Must be 2 characters." 
        } 
       } 
      }; 
    } 
} 

maintenant si vous appelez getRule il retournera un objet comme ce

var myruleDef = getRule(rule); 

$(selector).rules(myruleDef.param1, myruleDef.param2); 
+0

Compte tenu de la façon dont il est utilisé, peut-être retourner un tableau au lieu d'un objet? de cette façon, il pourrait simplement appeler '.rules (myruleDef)' non? – Ryley

+0

Merci, je pense que cela fonctionnera mieux pour ma configuration actuelle – littlevahn

0

Vous pouvez stocker vos règles dans une carte:

var rules = { 
    fName: { 
     regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$", 
     minlength: 2, 
     messages: { 
      minlength: "Must be 2 characters." 
     } 
    }, 
    lName: { // ... } 
    // ... 
}; 

Et appliquer toutes avec:

for (var id in rules) { 
    $("#" + id).rules("add", rules[id]); 
} 

Note: Vous n'avez pas besoin break après une return.

Remarque2: encapsulez et indentez vos littéraux d'objet pour plus de lisibilité.

+0

Merci pour les notes. Ill regarder dans cette méthode – littlevahn

Questions connexes