我试图从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')});
});
答案 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
,$temp
,randomPassword
的建议并添加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')});
});