JSLint显示了很多错误,但我的程序运行正常

时间:2010-11-03 11:47:25

标签: jquery jslint

我试图从JSLint验证我的JQuery代码并且遇到很多错误。请让我知道如何解决。

这是密码强度计代码

    $.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 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$_+";
                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')});

        });

3 个答案:

答案 0 :(得分:2)

您的错误是样式错误,JSLint不喜欢这样:

if(condition) thing();

希望看到if() {},如下所示:

if(condition) { thing(); }

消除任何歧义,如下:

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

otherThing()无论条件如何都会运行,但乍一看并不清楚,而这是:

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

它也不喜欢可选的冒号(我也不喜欢它们使用它们!),总是包含它们,而这个纯粹的风格:它想要看到在内部声明的内部函数getPasswordStrength顶部的父母。

您的程序运行正常,运行正常,您可以决定JSLint验证的重要性。

答案 1 :(得分:0)

在您编写的代码中

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

在我看来

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

会更好阅读(如果它是你想要的,你不会忘记更多)。如果您以后决定为JavaScript代码使用一些最小化工具,那么使用“{”和“}”对于获得始终正确的工作代码非常重要。

在语句结尾处编写分号是JavaScript中的好方法,那么为什么不遵循建议并在下一个语句之后放置呢?

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

此外,我很高兴关注$max函数内的全局变量$num$temprandomPassword的建议并添加var声明

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

同样对v函数内的el$.fn.passwordstrength也有意义。如果你将使用

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非常好,因为它有助于找到一些手动难以找到的小错误。

答案 2 :(得分: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')});
});