我正在尝试创建自己的JS密码强度计。
之前有效,但我不喜欢它是如何工作的所以我尝试使用
{score +=10;}
而不仅仅是:
score++
这是我的代码: http://jsfiddle.net/RSq4L/
最诚挚的问候, 肖恩,
希望有人可以提供帮助
答案 0 :(得分:4)
多个问题:
对于第一个问题,在jsFiddle中,您还必须确保在全局范围内定义了密码处理功能。你的jsFiddle的设置方式,它不是(它在onload处理程序中)。您只需将左上角的第一个下拉菜单设置为“no wrap(head)”即可在jsFiddle中修复此问题。
对于第二个问题,您正在使用:
ratingMsg[score]
但是,你的数组是一个稀疏数组,不能保证有大多数可能分数的条目。您根本无法这样做,因为您访问的许多元素将具有未定义的值,这些值不会给您带来有意义的消息。例如,如果得分为15,您将访问ratingMsg [15],但数组中的该空间没有值,因此您将无法获得有意义的评级消息。
解决方案是找到一种不同的方法来选择正确的消息。最简单的方法就是if / else if / else if语句,它将检查得分所在的范围并设置适当的msg。有更优雅的表格驱动方式,但所有都将涉及搜索数据结构,以找出当前得分在两个值和使用该消息之间的两个值。
如果你看一下这个jsFiddle http://jsfiddle.net/jfriend00/dA7XC/,你会看到你的代码被调用了,但它有时只会触及数组中的值。
而且,这是一个重写的算法,无论分数在这个小提琴中显示什么,它都能找到合适的信息:http://jsfiddle.net/jfriend00/jYcBT/。
它使用如下数据结构:
var ratingMsg = [
0, "Unclassified",
10, "Weak",
20, "Fair",
50, "Better",
60, "Medium",
70, "Good",
90, "Strong"
];
和这样的for循环得到适当的ratingMsg:
for (var i = ratingMsg.length - 2 ; i >= 0; i-=2) {
if (score >= ratingMsg[i]) {
msg = ratingMsg[i+1];
break;
}
}
答案 1 :(得分:2)
在这里:http://jsfiddle.net/RSq4L/11/
第一个问题是,在你的小提琴中你设置了onLoad
选项,所以你的passwordStrength
函数实际上并没有在全局范围内声明。它是在jsFiddle包装你的代码的onLoad
块内声明的。当按键处理程序尝试调用该函数时,这会导致页面出错。
您可以通过多种不同方式解决此问题:
onLoad
。onkeydown
属性进行设置。第二个问题是你如何键入你的分数信息。你有:
var ratingMsg = new Array(0);
ratingMsg[0] = "Unclassified";
ratingMsg[10] = "Weak";
ratingMsg[30] = "Fair";
ratingMsg[50] = "Better";
ratingMsg[60] = "Medium";
ratingMsg[70] = "Good";
ratingMsg[90] = "Strong";
...然后您通过ratingMsg[score]
查找邮件。这仅在分数完全匹配您的某个索引时才有效。根据你的数学,情况并非总是如此。
我建议做类似的事情:
ratingMsg = {};
ratingMsg[0] = "Unclassified";
ratingMsg[10] = "Weak";
ratingMsg[30] = "Fair";
ratingMsg[50] = "Better";
ratingMsg[60] = "Medium";
ratingMsg[70] = "Good";
ratingMsg[90] = "Strong";
function closestRating(score) {
var bestKey = 0;
var bestMatch = 100;
for (var key in ratingMsg) {
if (key <= score && score - key < bestMatch) {
bestMatch = score - key;
bestKey = key;
}
}
return ratingMsg[bestKey];
}
在不相关的说明中,您确定要使用onkeydown
吗?我认为onkeyup
会更好。
答案 2 :(得分:0)
你的小提琴脚本有几个错误。以下是更正后的问题:new script。