2010-11-03 1 views
2

J'ai essayé de valider mon code JQuery à partir de JSLint et j'ai eu beaucoup d'erreurs. S'il vous plaît laissez-moi savoir comment réparer.JSLint Affiche autant d'erreurs mais mon programme fonctionne correctement

Ceci est un passe Mot de passe Force code compteur

$.fn.passwordstrength = function(options){ 
        return this.each(function(){ 
        var that = this;that.opts = {}; 
        that.opts = $.extend({}, $.fn.passwordstrength.defaults, options); 

        that.div = $(that.opts.targetDiv); 
        that.defaultClass = that.div.attr('class'); 

        that.percents = (that.opts.classes.length) ? 100/that.opts.classes.length : 100; 

        v = $(this) 
        .keyup(function(){ 
        if(typeof el == "undefined") 
        this.el = $(this); 
        var s = getPasswordStrength(this.value); 
        var p = this.percents; 
        var t = Math.floor(s/p); 
        if(100 <= s) 
         t = this.opts.classes.length - 1; 
        this.div 
         .removeAttr('class') 
         .addClass(this.defaultClass) 
         .addClass(this.opts.classes[ t ]); 

       }) 
      }); 

      function getPasswordStrength(H){ 
       var D=(H.length); 
       if (D<4){ 
        D=0; 
       } 
       if(D>5){ 
        D=5; 
       } 
       // This is patern for non-numeric characters 
       var F=H.replace(/[0-9]/g,""); 
       var G=(H.length-F.length); 
       if(G>3){ 
        G=3; 
       } 
       // This is patern for uppercase and lowercase evaluation 
       var A=H.replace(/\W/g,""); 
       var C=(H.length-A.length); 
       if(C>3){ 
        C=3; 
       } 

       var B=H.replace(/[A-Z]/g,""); 
       var I=(H.length-B.length); 
       if(I>3){ 
        I=3; 
       } 

       // This is patern for Special Characters 
       var P=H.replace(/^[@#$^&]*$/,""); 
       var Q=(H.length-P.length); 
       if(Q>3){ 
        Q=3; 
       } 

       var E=((D*10)-20)+(G*10)+(C*15)+(I*10)+(Q*10); 
       if(E<0){ 
        E=0; 
       } 
       if(E>100){ 
        E=100; 
       } 
       return E; 
      } 

      function randomPassword() { 
       var chars = "[email protected]#$_+"; 
       var size = 10; 
       var i = 1; 
       var ret = ""; 
       while (i <= size) { 
        $max = chars.length-1; 
        $num = Math.floor(Math.random()*$max); 
        $temp = chars.substr($num, 1); 
        ret += $temp; 
        i++; 
       } 
       return ret; 
      } 

     }; 

     $(document) 
     .ready(function(){ 
      $('input[name="password"]').passwordstrength({targetDiv: '#pwd_strength',classes : Array('weak','medium','strong','complex')}); 

     }); 

Répondre

2

Vos erreurs sont des erreurs de style, JSLint n'aime pas:

if(condition) thing(); 

Il veut voir if() avec {}, comme ceci:

if(condition) { thing(); } 

Pour éliminer toute ambiguïté, comme par exemple s:

if(condition) 
thing(); 
otherThing(); 

otherThing() fonctionne quelle que soit la condition, mais ce n'est pas clair au premier coup d'œil, alors que c'est:

if(condition) { 
    thing(); 
} 
otherThing(); 

En outre, il n'aime pas en option des points-virgules (et moi non plus, utilisez-les damnit!), incluez-les toujours, et celui-ci est purement style: Il veut voir la fonction interne getPasswordStrength déclarée au sommet de son parent.

Votre programme va bien et fonctionnera bien, vous décidez combien la validation de JSLint est importante.

0

Dans votre code que vous écrivez

if(typeof el == "undefined") 
this.el = $(this); 

Il me semble que

if(typeof el == "undefined") { 
    this.el = $(this); 
} 

sera préférable de lire (si elle est ce que vous voulez et vous oubliez pas quelque chose de plus). Si vous décidez ultérieurement d'utiliser des outils de minimisation pour votre code JavaScript, l'utilisation de '{' et '}' peut être très importante pour recevoir un code de travail toujours correct. L'écriture des points-virgules à la fin des instructions est un bon style en JavaScript, alors pourquoi ne pas suivre la recommandation et la placer après l'instruction suivante?

return this.each(function(){ 
    // ... 
}) 

De plus, je trouve bon de suivre des conseils sur les variables globales $max, $num, $temp intérieur randomPassword fonction et ajouter var déclarations

var $max = chars.length-1; 
var $num = Math.floor(Math.random()*$max); 
var $temp = chars.substr($num, 1); 

Le même a un sens aussi pour v et el à l'intérieur de $.fn.passwordstrength fonction . Si vous utilisez

var v = $(this) 

ou

$(this) 

(parce que vous n'utilisez pas v dans votre code.Il peut être que vous vouliez utiliser this.v, mais vous devez savoir cela mieux que moi) au lieu de

v = $(this) 

et

if(typeof this.el == "undefined") { 
    this.el = $(this); 
} 

au lieu de

if(typeof el == "undefined") { 
    this.el = $(this); 
} 

vous programme fonctionnera un peu rapidement et aura moins de conflits potentiels en raison de l'utilisation des mêmes variables globales.

La suppression de la fonction inutilisée randomPassword peut également être une bonne idée.

Je trouve personnellement JSLint très bon, car il aide à trouver quelques petites erreurs qui peuvent être difficiles à trouver manuellement.

+0

Salut Oleg, J'ai besoin d'éditer mon Regx et de coder pour l'extension de mot de passe avec les critères ci-dessous. 1. Le mot de passe a un mélange de lettres et de chiffres 2. Le mot de passe mélange également les minuscules et les majuscules 3. Le mot de passe a également au moins 8 caractères ou plus 4. Le mot de passe a aussi des caractères spéciaux comme?, *, \, "" ou + 5. Le mot de passe a aussi au moins 10 caractères – SASHI

+0

@SASHI: Désolé Sashi, mais comment 'RegEx' est-il connecté aux erreurs JSLint de votre question principale? Le seul avertissement JSLint est la recommandation de remplacer '/^[@ # $^&] * $ /' par// [@ # $ \^&] * $/'. – Oleg

0

Voici le code "fixe". J'ai supprimé la fonction randomPassword car elle n'était pas référencée dans votre code.

/*global $:false, document:false, el:true*/ 

$.fn.passwordstrength = function(options){ 
    function getPasswordStrength(H){ 
     var D=(H.length); 
     if (D<4){ 
      D=0; 
     } 
     if(D>5){ 
      D=5; 
     } 
     // This is patern for non-numeric characters 
     var F=H.replace(/[0-9]/g,""); 
     var G=(H.length-F.length); 
     if(G>3){ 
      G=3; 
     } 
     // This is patern for uppercase and lowercase evaluation 
     var A=H.replace(/\W/g,""); 
     var C=(H.length-A.length); 
     if(C>3){ 
      C=3; 
     } 

     var B=H.replace(/[A-Z]/g,""); 
     var I=(H.length-B.length); 
     if(I>3){ 
      I=3; 
     } 

     // This is patern for Special Characters 
     var P=H.replace(/^[@#$\^&]*$/,""); 
     var Q=(H.length-P.length); 
     if(Q>3){ 
      Q=3; 
     } 

     var E=((D*10)-20)+(G*10)+(C*15)+(I*10)+(Q*10); 
     if(E<0){ 
      E=0; 
     } 
     if(E>100){ 
      E=100; 
     } 
     return E; 
    } 

    return this.each(function(){ 
     var that = this;that.opts = {}; 
     that.opts = $.extend({}, $.fn.passwordstrength.defaults, options); 

     that.div = $(that.opts.targetDiv); 
     that.defaultClass = that.div.attr('class'); 

     that.percents = (that.opts.classes.length) ? 100/that.opts.classes.length : 100; 

     $(this).keyup(function(){ 
      if(typeof el == "undefined"){ 
       this.el = $(this); 
      } 
      var s = getPasswordStrength(this.value); 
      var p = this.percents; 
      var t = Math.floor(s/p); 
      if(100 <= s){ 
       t = this.opts.classes.length - 1; 
      } 
      this.div 
       .removeAttr('class') 
       .addClass(this.defaultClass) 
       .addClass(this.opts.classes[ t ]); 

     }); 
    }); 
}; 

$(document).ready(function(){ 
    $('input[name="password"]').passwordstrength({targetDiv: '#pwd_strength',classes : Array('weak','medium','strong','complex')}); 
}); 
+0

@SASHI si ma réponse a fonctionné pour vous pouvez [voter] (http://stackoverflow.com/help/privileges/vote-up) ou [accepter] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) le? – Eric

Questions connexes