Несколько выпусков:
- Ваша функция passwordStrength () не была определена в глобальной области видимости в jsFiddle, поэтому она не вызывается. Вероятно, это артефакт того, как вы настроили jsFiddle, возможно, это не проблема в вашем реальном коде.
- Метод получения соответствующей рейтинговой оценки не будет работать, потому что у вас нет значений массива для каждой возможной оценки, поэтому многие оценки генерируют «неопределенную» рейтинговую оценку.
- Ваши CSS-классы также немногочисленны, поэтому существует множество значений баллов, по которым они не будут совпадать, и не будет действовать соответствующий класс / стиль CSS. Если вам нужен определенный класс для каждого значения рейтинга, то, возможно, вам следует поместить имя класса в массив оценок, чтобы его можно было извлечь из него вместе с оценками MSG.
Для первой проблемы в jsFiddle вы также должны убедиться, что функция обработки пароля определена в глобальной области видимости. Способ установки вашего jsFiddle - нет (он находится в обработчике загрузки). Вы можете исправить это в jsFiddle, просто установив первый раскрывающийся список в верхнем левом углу на «no wrap (head)».
Для второго выпуска вы используете:
ratingMsg[score]
но ваш массив является разреженным массивом, в котором не гарантируется запись для большинства возможных результатов. Вы просто не можете сделать это таким образом, потому что многие элементы, к которым вы обращаетесь, будут иметь неопределенные значения, которые не дадут вам значимого сообщения. Например, если бы оценка была 15, вы бы получили доступ к ratingMsg [15], но в этом массиве нет значения в этом пространстве, поэтому вы не получите значимого оценочного сообщения.
Решение состоит в том, чтобы найти другой способ выбрать правильное сообщение. Простейшим способом будет просто оператор if / else if / else if, который проверит, в каком диапазоне находится оценка, и установит соответствующее сообщение. Существуют более элегантные способы, управляемые таблицами, но все они включают поиск в структуре данных, чтобы найти, между какими двумя значениями находится текущий счет, и использование этого сообщения.
Если вы посмотрите на этот 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, чтобы получить соответствующий рейтингMsg:
for (var i = ratingMsg.length - 2 ; i >= 0; i-=2) {
if (score >= ratingMsg[i]) {
msg = ratingMsg[i+1];
break;
}
}