2010-09-21 6 views
0

J'ai créé une méthode d'ajout d'email (jquery) pour valider plusieurs emails pour la zone de texte du destinataire. ça fonctionne bien quand prototype.js n'est pas déclaré sur la page. Pour se débarrasser du conflit $ j'ai également incorporé la mesure de mesure de la méthode $ noconflict(). Les autres validations de champs fonctionnent dans ce scénario, à l'exception du champ de validation du courrier électronique destinataire. Selon ma conclusion "jQuery.validator.methods.email.call (this, value, element)" ligne n ° 50 de la page ne fonctionne pas et par conséquent la méthode ne tire pas. Je dois aussi appeler le prototype.js. S'il vous plaît voir le code suivant pour une compréhension plus claire ....... Merci d'avance.La méthode de validation multi-mails ne fonctionne pas, si nous appelons le prototype.js sur la page?

S'il vous plaît voir le code ci-dessous: multi Email Validation
var = JQ jQuery.noConflict();
JQ (document) .ready (function() {

// Handler for .ready() called. 
JQ("#email-form").validate({ 
      rules : { 
       email : { 
        required : true, 
            email : true 
       }, 
          recipientEmail : { 
        multiemail: true, 
            required : true 
          //  email : true 
            } 
      }, 
        messages: { 
       email: { 
        required: "Please enter your email address.", 
            email: "Please enter a valid email address" 
       }, 
          recipientEmail: { 
            multiemail: "One or more of your recipient email addresses needs correction.", 
            required: "Please enter the recipient's email address." 
            //email: "Please enter a valid email address" 
       } 
      } 
     }); 
}); 

JQ.validator.addMethod ("multiemail", la fonction (valeur, élément) { if (this.optional (élément)) // retour true sur l'élément facultatif return true; // var emails = valeur.split (nouvelle valeur RegExp ("\ s *, \ s *", "gi")); var emails = valeur.split (nouvelle valeur RegExp ("\ s *, \ s * », "gi"));

 valid = true; 
       maxEmaillength = emails.length; 
     for(var i in emails) 
      { 
     value = emails[i]; 
     valid = valid && jQuery.validator.methods.email.call(this, value, element); 
        // Maximum email length validation 
         if(maxEmaillength > 5) 
           { 
             JQ('label.error:first').html("Please enter only 5 mail IDs at a time"); 
             JQ('label.error:first').css(display, block);        
             setTimeout(alert("Please enter only 5 mail IDs at a time"), 5); 
          }  
     } 
     return valid; 
        }, 'One or more email addresses are invalid'); 

</head> 
<body> 
<form action="" method="get" name="email-form" id="email-form"> 
<label for="email">email</label> 
<input type="text" name="email" id="email" style="width:200px" /> 
<br /> 
<label for="recipientEmail">Recipient Email</label> 
<input type="text" name="recipientEmail" id="recipientEmail" style="width:500px" /><br /> 

<input type="submit" name="Submit" id="Submit" value="Submit" /> 
</form> 
</body> 
</html> 

Répondre

1

je suffit de changer l'approche un peu, comme jQuery.validator.methods.email.call (cette valeur, élément) ne fonctionnait pas dans la méthode personnalisée précédente. Bien que je ne pouvais pas trouver la raison exacte, pourquoi cela ne fonctionnait pas avec prototype.js et quelle est la solution exacte pour ce problème. Mais l'extrait de code suivant fonctionne comme vous le souhaitez. Il suffit de remplacer cette méthode de courrier électronique jquery précédente par la suivante.

function validateEmail(field) { 
    var regex=/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i; 
    return (regex.test(field)) ? true : false; 
} 

JQ.validator.addMethod("multiemail", function(value, element) 
{ 
    var result = value.split(","); 
    for(var i = 0;i < result.length;i++) 
    if(!validateEmail(result[i]) || result.length > 5) 
    return false;    
    return true;              

},'One or more email addresses are invalid'); 
+0

J'ai testé de mon côté. Ça marche. S'il vous plaît donner votre suggestion d'amélioration le cas échéant. –