2009-09-16 13 views
3

J'utilise jquery validate plugin pour valider une adresse e-mail par rapport à une base de données en utilisant la méthode distante de ce plugin.Avec JQuery Validation Plugin, je souhaite changer la méthode de validation à distance

Je dois vérifier l'adresse e-mail ne est pas déjà dans notre base de données. À l'origine, le script en combinaison avec le code côté serveur vérifie simplement l'adresse e-mail dans notre base de données et renvoie true ou false, cela fonctionne correctement.

Je dois maintenant ajouter une fonctionnalité supplémentaire car il est maintenant possible pour nous d'avoir la même adresse email dans la base de données deux fois aussi longtemps que le siteid de l'enregistrement est différent, c'est à dire un enregistrement pour [email protected] = site1 existe dans la base de données, vous ne pouvez pas ajouter à nouveau [email protected] avec siteid = site1, mais vous pouvez ajouter [email protected] avec siteid = site2.

J'ai confirmé que le code côté serveur fonctionnait et pour une adresse e-mail et un ID de site donné, il renvoie true ou false comme prévu.

Je souhaite revalider le champ de courrier électronique chaque fois que la zone de sélection siteid est modifiée. Pour l'instant il semble se souvenir de sa validation précédente (il est déjà validé au chargement) et n'est pas affecté par le changement de siteid, sauf si je change l'email de [email protected] à quelque chose d'autre, puis le change, puis il valide correctement pour le nouveau siteid. J'ai essayé une combinaison de supprimer des règles et d'ajouter des règles, rien ne semble fonctionner.

Aide!

<html> 
<head> 
<script type="text/javascript"> 
$(document).ready(function() { 
    var enquiryform = { 
     rules: { 
     email: { 
      required: true, 
     email: true, 
     remote: 'emailcheck2.asp?siteid=' + $('#siteid').val() 
     }   
    }, 
    messages: { 
      email: { 
      remote: 'exists already!' 
     } 
     }   
    }; 

    var validatedform = $(".validatedform").validate(enquiryform).form();  
    $("#siteid").bind("change", function(e){ 
     enquiryform.rules.email.remote='emailcheck2.asp?siteid=' + $('#siteid').val(); 
    }); 
}); 
</script> 
</head> 
<body class="contactadd"> 
</head> 
<body> 
<form method="Post" class="validatedform"> 
<input class="email" id="email" name="email" type="text"> 
<select id="siteid" name="siteid"> 
<option value="1">Site 1</option> 
<option value="2">Site 2</option> 
</select> 
<input id="submitbutton" type="submit" value="Create"> 
</form> 
</body> 
</html> 
+0

cochez ceci, ça m'a aidé! http://www.opencoder.co.uk/2010/07/jquery-remote-form-validation/ –

Répondre

1

D'après ce que je peux dire, cela peut être une limitation du plugin validate. Il y a plusieurs options pour déclencher la validation (ce que vous voulez faire) donnée à http://docs.jquery.com/Plugins/Validation/validate#toptions mais je ne vois pas comment déclencher la validation sur un élément quand un autre élément change.

Votre meilleur pari est de placer votre code de validation quelque chose comme ceci:

$('select#siteid').onChange(function(){ 
     $('form.validatedform').validate({ 
       rules:{ 
         email: { 
           required: true, 
           email: true, 
           remote: 'emailcheck2.asp?siteid=' + $('#siteid').val() 
         } 
        } 
     }); 
    }); 
+0

ne semble pas fonctionner. Il semble qu'une fois qu'un élément a été validé, soit par un formulaire de soumission ou en utilisant .form() pour le forcer au début, il ne permettra pas la revalidation tant que quelque chose n'aura pas changé sur le terrain. Si je change l'adresse e-mail et que j'efface le champ, puis que je me recentre dessus et que je le change, vous pouvez revalider. –

10

Le plugin met en cache la valeur pour des raisons de performance. Pour contourner ce problème pour l'instant, vous pouvez essayer d'invalider le cache manuellement chaque fois que les changements de valeur à charge:

$("#site").change(function() { 
    $("#email").removeData("previousValue"); 
});
1

Salut si vous utilisez ce plugin valdation jquery, http://docs.jquery.com/Plugins/Validation/validate

Si vous voulez envoyer des paramètres supplémentaires (par exemple siteid) pour la validation à distance, vous pouvez faire quelque chose comme ceci:

var enquiryform = { 
     rules: { 
      email: { 
       required: true, 
       email: true, 
       remote: { 
        url: "emailcheck2.asp", //this should be the full path url including base url 
        data: { 
         siteid: function() { 
          return $('#siteid').val(); 
         } 
        } 
       } 
      } 
     } 
    }; 
Questions connexes