Показать сообщение отдельно
  #4 (permalink)  
Старый 21.03.2011, 17:11
Интересующийся
Отправить личное сообщение для Александр345 Посмотреть профиль Найти все сообщения от Александр345
 
Регистрация: 20.03.2011
Сообщений: 16

Спасибо - рони, за уделенное время, но от моего скрипта вообще мало что осталось. Это из за его непригодности или вам проще новый написать чем ковырять чужой скрипт? Просто интересуюсь. ))

Дело в том что я обучаюсь на курсах и мне нужно будет его сдавать, т.е. рассказать чего как работает. У меня пока не такие шикарные познания в 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, а оказывается еще нагородить туда нужно еще функцию чтоб работала.

И последний вопрос. Сейчас вы проверяете все поля на заполнение, а функция мигает только первым пустым полем. Так предусмотренно в коде чтоб так работало или этот код просто пример рабочего скрипта проверки формы?
Ответить с цитированием