2011-02-14 4 views
1

Je vérifie certaines zones de texte sur le flou, certaines doivent être vérifiées par rapport aux mêmes critères, donc je mets tout cela dans une fonction de flou. J'ai remarqué que ma page semble lente et dans firebug je garde l'erreur too much recursion.jquery trop de récursion sur la fonction de flou multiple

Mon code est ci-dessous, il vérifie la zone de texte, puis envoie l'ID à une autre fonction qui ajoute une classe pour dire si elle est valide ou non valide.

$('#username, #customerName, #customerTown, #customerCounty, #contactName, #staffFirstname, #staffLastname, #staffTown, #staffCounty').blur(function() 
{ 
    var ID = $(this).attr('id'); 
     var val = $(this).val();      
     if(validate(val)) 
     { 
      valid(ID); 

     } 
     else 
     {    
      notValid(ID); 
     } 

}); 

function valid(elementID) 
{ 
      $('#'+elementID+'Img').html('<img src="../images/tick.png" alt="Valid" title="Valid" />'); 
      $('#' + elementID).addClass('valid'); 

} 

function notValid(elementID) 
{ 
      $('#'+elementID+'Img').html('<img src="../images/cross.png" alt="Not Valid" title="Not Valid" />'); 
      $('#' + elementID).removeClass('valid');      

} 

function validate(val) 
    { 
     var reg = new RegExp ("^([a-zA-Z ]){3,90}$"); 
     var regTest = reg.test(val); 
     if(regTest) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
} 

Serait-il mieux si je l'ai fait une fonction blur seprate pour chaque zone de texte? Ou y a-t-il un autre moyen? Je ne veux pas vraiment écrire une fonction de flou pour chaque zone de texte.

Des suggestions? Merci.

+1

êtes-vous sûr que c'est ce code qui provoque la lenteur et les messages d'erreur? Je ne trouve rien qui serait lent et aucune récursivité. – Guffa

+0

C'est essentiellement tout le code que j'ai sur ma page, il y a quelques autres zones de texte qui sont vérifiées mais c'est de la même manière que ci-dessus. Seule une autre fonction est un onclick mais j'obtiens l'erreur avant qu'elle ne soit pressée. Merci. – Elliott

Répondre

2

J'ai essayé votre code, et il ne montre aucun signe de lenteur, et il n'y a aucun message d'erreur, même pas dans la console d'erreur.

http://jsfiddle.net/5sFWF/

Voici quelques suggestions des changements dans le code, en utilisant une seule fonction pour définir l'état au lieu de deux, en utilisant jQuery pour créer des éléments au lieu de coller ensemble le code HTML, en évitant le si-vrai alors -true-else-faux dans la fonction antimodèle validate:

http://jsfiddle.net/5sFWF/2/

+0

Excellent! Merci beaucoup, j'apprécie vraiment :) – Elliott