2010-11-03 16 views
2

我試圖從JSLint驗證我的JQuery代碼,並得到很多錯誤。請讓我知道如何解決。JSLint顯示如此多的錯誤,但我的程序工作正常

這是一個低於密碼場強儀代碼

$.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')}); 

     }); 

回答

2

你的錯誤是風格的錯誤,JSLint的不喜歡這樣的:

if(condition) thing(); 

它希望看到if(){},就像這樣:

if(condition) { thing(); } 

爲了消除任何歧義, S:

if(condition) 
thing(); 
otherThing(); 
不管條件如何的

otherThing()運行,但不是在第一一目瞭然,而這就是:

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

而且它不會像可選分號(而且我也不會用,他們該死!),總是包含它們,這是一個純粹的風格:它想要看到在其父項頂部聲明的內部函數getPasswordStrength

你的程序很好,運行良好,你決定有多少JSLint驗證很重要。

0

在你的代碼編寫

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

在我看來,那

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

會更好看(如果它是你想要什麼,你不能忘記更多的東西)。如果您稍後決定爲您的JavaScript代碼使用一些最小化工具,則使用「{」和「}」對於始終接收正確的工作代碼非常重要。

在語句結尾處寫分號是JavaScript的良好風格,那麼爲什麼不按照推薦並在下一個語句之後放置呢?

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

而且我覺得很好遵循建議有關全局變量的$max$num$temprandomPassword函數中添加$.fn.passwordstrength函數內var聲明

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

同樣具有意義也爲vel 。如果要使用

var v = $(this) 

$(this) 

(因爲你沒有在你的代碼中使用v。它可以是你想使用this.v,但你應該知道這更好,因爲我),而不是

v = $(this) 

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

,而不是

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

你計劃將努力一點點因爲使用了相同的全局變量,所以很快就會有較少的潛在衝突

刪除未使用的功能randomPassword也是一個好主意。

我個人發現JSLint非常好,因爲它有助於發現一些手動難以找到的小錯誤。

+0

嗨奧列格,我需要編輯我的雷克斯和密碼atrength代碼與以下條件。 1.密碼有字母和數字組合 2.密碼還混合了小寫字母和大寫字母 3.密碼也至少有8個字符或更多 4.密碼還有特殊字符,如?,*,\,「」或+ 5.密碼至少有10個字符 – SASHI 2010-11-04 04:28:47

+0

@SASHI:對不起Sashi,但是'RegEx'是如何連接到主要問題的JSLint錯誤?唯一的JSLint警告是建議將'/^[@#$ ^&] * $ /'替換爲'/^[@#$ \ ^&] * $ /'。 – Oleg 2010-11-04 09:00:40

0

這是「固定」代碼。我刪除了randomPassword函數,因爲它沒有在您的代碼中引用。

/*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如果我的答案爲你工作,你可以[投票](http://stackoverflow.com/help/privileges/vote-up)或[接受](http://meta.stackexchange.com/questions/5234 /如何接受一個答案 - 工作)呢? – Eric 2015-10-24 17:50:04

相關問題