2010-04-11 8 views
2

Markup:plugin jQuery, la valeur de retour de la fonction

<input type="text" name="email" /> 

code:

$(':text').focusout(function(){ 
    $(this).validate(function(){ 
     $(this).attr('name'); 
    }); 
}); 

Plugin:

(function($){ 
    $.fn.validate = function(type) { 
     return this.each(function(type) { 
      if (type == 'email') { 
       matches = this.val().match('/[email protected]+\..{2,7}/'); 
       (matches != null) ? alert('valid') : alert('invalid'); 
      } 
      /*else if (type == 'name') { 

      } 
      else if (type == 'age') { 

      } 
      else if (type == 'text') { 

      }*/ 
      else { 
       alert('total failure'); 
      } 
     }); 
    }; 
})(jQuery); 

Le problème est que lorsque j'exécute le code ci-dessus, il court le plugin comme si le type était une chaîne: "function() { $ (this) .attr ('name'); });" au lieu de l'exécuter en tant que fonction. Comment puis-je résoudre ceci?

+0

Appeler $ (this) .validate ($ (this) .attr ('nom'))? En outre, utilisez $ (this) .val() au lieu de this.val(). – jweyrich

Répondre

1

Vous devez vérifier si le paramètre est une fonction. Si oui, utilisez la valeur de retour sinon supposez que c'est une valeur littérale.

(function($) { 
    $.fn.validate = function(type) { 
     //check if type type is a function else take it as literal 
     type = typeof type !== "function" ? type : type(); 
     return this.each(function(type) { 
      ... 
     }); 
    }; 
})(jQuery); 
Questions connexes