Проверка полей input
К делу собственно, что сделать чтобы это "чудо" заработало.
Есть такая вот форма: <form method="post" action="/components/act/reg.php" class="reg"> <fieldset class="usr-inp"> <input type="text" name="login" id="reg-username" placeholder="Login..." class="neutral" onblur="" required /> <input type="email" name="email" id="reg-email" placeholder="E-mail..." class="neutral" onblur="" required /> <input type="password" name="password" id="reg-pass" placeholder="Password..." class="neutral" onblur="" required /> <input type="password" name="password" id="reg-check-pass" placeholder="Check password..." class="neutral" onblur="" required /> </fieldset> <fieldset class="tips"> </fieldset> <fieldset class="submiting"> <div class="rules-agree"> <input type="checkbox" id="agree" /> <label for="agree"></label> <p>Я согласен с <a href="#rules">правилами</a></p> </div> <button type="submit" disabled> <i class="icon-exit"></i> </button> </fieldset> </form> И такой вот скрипт, собственно первые функции в отдельном файле (все работают), а сам скрипт начинается с объявления переменных, проблема в том что по onblur ничего не происходит. function filterUserName(val) { var re = /^[\wа-яёЁА-Я]+([._ -]?[\wа-яёЁА-Я]+)*$/; return re.test(val); } function filterEmail(val) { var re = /^([^\s\'\"]+)\@([^\s\'\"]+)$/; return re.test(val); } function filterPassword(val) { var re = /^[\w\d\!\@\#\$\%\^\&\*\(\)\_\+\=\№\%\*\?\<\>\~\{\}\[\]\|\-]*$/; return re.test(val); } function hasClass(el, cls) { return el.classList.contains(cls); } function addClass(el, cls) { if (!hasClass(el, cls)) el.className += (el.className ? ' ' : '') + cls; } function removeClass(el, cls) { var newArray = el.className ? el.className.split(" ") : []; var result = []; for (var i = 0; i < newArray.length; i++) { if (newArray[i] != cls) { result.push(newArray[i]); } else { continue; } } el.className = result.join(" "); return el.className; } var username = document.getElementById("reg-username"); var email = document.getElementById("reg-email"); var password = document.getElementById("reg-pass"); var checkPassword = document.getElementById("reg-check-pass"); var checkBox = document.getElementById("agree"); var button = document.getElementById("submit"); username.onblur = function () { if (filterUserName(this.value)) { removeClass(this, 'neutral'); addClass(this, 'correct'); } else { removeClass(this, 'neutral'); addClass(this, 'in-correct'); } }; email.onblur = function() { if (filterEmail(this.value)) { removeClass(this, 'neutral'); addClass(this, 'correct'); } else { removeClass(this, 'neutral'); addClass(this, 'in-correct'); } }; password.onblur = function() { if (filterPassword(this.value)) { removeClass(this, 'neutral'); addClass(this, 'correct'); } else { removeClass(this, 'neutral');56 addClass(this, 'in-correct'); } }; checkPassword.onblur = function() { if (this.value == password.value) { removeClass(this, 'neutral'); addClass(this, 'correct'); } else { removeClass(this, 'neutral'); addClass(this, 'in-correct'); } }; Хотелось бы совет или прямую наводку, ибо в намеках не силен, можно если что ссылку на статьи или что-то подобное по этому поводу, буду рад помощи вообщем-то. можно если что на jsfiddle посмотреть или ссылочкой подогреть на исправленное: http://jsfiddle.net/daniilbagaev/sr4775no/1/ |
Открой консоль - там у тебя ошибка, не определен username, а так же и маил и все остальное равно null. Вероятно нужно пользовать window.onload . http://jsfiddle.net/sr4775no/2/
Ну и в консольку заглядывать никогда не помешает, а лучше держать открытой |
Где вы такое старье откопали, или это такой стиль у кого-то?
Не надо ничего искать кроме формы. Если форма ровно 1 - то берете ее по тегу. Программируете его события, типа там change, input, blur и тп. Все что происходит с инпутами на форме - все идет через нее. Если инпут ченчж - то и форма ченчж. form.addEventListener("change", validate); form.addEventListener("input", validate); У формы свои elements к которым можно обращаться просто по имени. Например form.email = это поле имейла. Постойте, так ведь тип email это html5. А почему тогда такой скрипт как будто из нулевых? Короче, валидация (если не юзать встроенную) затем делается просто по типу поля. var validate = { validate_email:function() {}, validate_password:function(){}, //... } var name = 'validate_'+form[elem].type; if(validate[name]) return validate[name](); else return true; // или общая проверка скажем на длину строки и тп ЗЫ Методы еще куда-то можно запихать подозреваю, в прототип например, но я щетаю для таких простых вещей хватит и обычного объекта. |
Кстати, помучившись с data- тегами я понял что в принципе обычных тегов вполне хватает для основных задач если их, теги, из индикаторов превратить в параметры. Например есть поле которое required. Это индикатор. И вы еще хотите чтобы длина текста в этом поле была не менее 3. Значит пишем required="3". В js получается, конечно, текст, но и компилятор в основном и вы сами унарной операцией можете сделать его числом. if(somevar > elem.required) работает автоматически, а когда надо посчитать то var somevar = +elem.required и у вас - число.
И еще, оказывается maxlength для типа file когда был специфицирован именно для байтов файла, а не текста имени файла (что вообще-то смысла не имеет, поскольку файловая система сама ограничивает и проверяет все), однако браузеропейсатели забили и поэтому maxlength в file значения не имеет, следовательно туда можно писать максимальный размер в килобайтах. Аналогично с multiple. Если в этот индикатор вписать число, multiple="3", то скрип поймет что тут надо выбрать допустим не более 3. При этом индицирующая роль индикаторов никуда не девается. Вписывать туда параметры не кошерно по отношению к xml, а кого колебет xml? Еще, паттерн можно записать прямо в тег. Чтобы, допустим тип file проверять в контексте. Для паттернов регулярок такой тег и предусмотрен - pattern. |
Часовой пояс GMT +3, время: 06:00. |