Спасибо -
рони, за уделенное время, но от моего скрипта вообще мало что осталось. Это из за его непригодности или вам проще новый написать чем ковырять чужой скрипт? Просто интересуюсь. ))
Дело в том что я обучаюсь на курсах и мне нужно будет его сдавать, т.е. рассказать чего как работает. У меня пока не такие шикарные познания в JS как у вас, так что если честно то есть вещи которые я не понял в вашем скрипте.
Но давайте по порядку.
Поставили обработчик на форму при нажатии на кнопку отправляем параметры на проверку в функцию check() - это понятно.
var rules = {
42 user_fname:[/\S+/],
43 user_tel:[/\S+/,/\d{6,11}/],
44 user_email:[/\S+/,/^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,3}/],
45 message:[/\S+/]
46 };
Это вы создаете объект со свойствами и присвоенными им значениями регулярных выражений, это понятно.
function check() {
48 var c = document.forms.form.elements,
49 a;
50 for (a in rules) for (var b = 0; b < rules[a].length; b++) if (!rules[a][b].test(c[a].value)) {
51 checkLable(c[a], 5);
52 return false
53 }
54 return true
55 };
for (a in rules) не совсем понятно, что это за действие такое. Оператор in это оператор для поиска свайства или индекса (в данном случае переменная а) в объекте или индекса в массиве. Так у вас пока нет а в объекте! А дальше or (var b = 0; b < rules[a].length; b++) идет перебор свойств в объекте и уже есть а. Получается что этим for (a in rules) вы заносите пустую переменную а в объект?
Дальше вообще не могу понять что здесь проверяется!
if (!rules[a][b].test(c[a].value))
Если в свойствах объекта rules нет совпадений с регулярным выражением test(c[a].value) - так?
Получается что у объекта rulers два счетчика - а и b?
И не ясна запись c[a].value, даже если подставить значение переменной с все равно не понятно
document.forms.form.elements[a].value
Переменная а это же свойство или объект? Что-то я совсем запутался.
Вот этот кусок тоже не понятен
function checkLable(b, a) {
58 b.style.backgroundColor = a % 2 ? "#f00" : "";
59 a-- && window.setTimeout(function (c, d) {
60 return function () {
61 checkLable(c, d)
62 }
63 }(b, a), 300)
64 };
В строке 58 запись а%2 означает деление и в место а у вас 5. Тогда получается при делении 1 и е сли 1 то цвет красный иначе ничего, правильно я понял?
Не понятен синтаксис a-- && window.setTimeout
Т.е. вместо а - 5 получается 5-- && window.setTimeout
Это условие, тогда почему нет оператора или что это такое - запустить функцию 4 раза?
А откуда берутся параметры анонимной функции function (c, d) с и d?
Если это тоже что и b, a на входе, то почему вложена функция
60 return function () {
61 checkLable(c, d)
62 }
Правда у меня без этого не работала мигалка. Странно что в литературе иполуется просто тайминг SetTimeout, а оказывается еще нагородить туда нужно еще функцию чтоб работала.
И последний вопрос. Сейчас вы проверяете все поля на заполнение, а функция мигает только первым пустым полем. Так предусмотренно в коде чтоб так работало или этот код просто пример рабочего скрипта проверки формы?