Validation script
Я написала простой скрипт, где пользовательбкогда заполняет форму правильноб переходит на другую страницу, иначе выводится сообщение об ошибке в заполнении формы. Однако же, новая страницабнесмотря на мои старания, открывается всегда.
Буду признательна за подсказку. <!DOCTYPE html> <html> <head> <script type = "text/javascript"> function overallcheck () { if(!checkjob()|| !checkEmail()|| !Checkname()) {writeTo("problemArea","Error messages area"); return false; } if(!Checkname()) {writeTo("problemArea","Please inser a valid name"); return false; } if(!checkEmail()) {writeTo("problemArea","Please inser a valid email"); return false; } if(!checkjob()) { writeTo("problemArea","Please inser your job"); return false; } else { return true; } } function Checkname(){ clearElement("problemArea"); var fullname = document.forms['form'].fullname.value; if (fullname.length == 0 || !isNaN(fullname)) return false; } function checkEmail(){ clearElement("problemArea"); var mail = document.forms['form'].Email.value; if (mail == '' || mail.indexOf('@') == -1 || mail.indexOf('.') == -1) return false;} } function checkjob() { clearElement("problemArea"); var i; for (i=0;i<4;i++) { if (document.forms['form'].job[i].checked) {return true;} } return false; } //--> </script> </head> <body> <form onsubmit="return overallcheck();" action="res.html" id=form target="_blank" method="GET"> <table> <tr> <td><b><p>name</p></b> </td> <td> <input type="text" name="fullname" size="20" placeholder="Enter a valid name"/> </td> </tr> <tr> <td><b><p> E-mail: </p></b></td> <td><input type="email" name="Email" maxlength="15" size = "20" placeholder="Enter a valid email address"/> </td> </tr> <tr> <p><td><b><p>job?</p></b> <br/></td></p> <td>1<input type="radio" name="job" value="gov" /><br/> 2 <input type="radio" name="job" value="pri" /><br/><div id="problemArea"> </div> 3 <input type="radio" name="job" value="unem" /><br/> 4 <input type="radio" name="job" value="other" /><br/> </td></tr> </table> <p> <button type="submit" onclick="" >submit</button> </form> </body> </html> |
Doraemon,
что такое Цитата:
Цитата:
|
WriteTo пишет сообщение об ошибке в поле для ошибок.
42 я что-то нигде не вижу... |
Doraemon,
строка 42 там у вас фигурная скобка зачем ? Цитата:
|
Спасибо! поправила скобку, но проблема осталась прежней.
Насчет поля для ошибок, см. строку 78. Кои-какие неважные куски кода я убрала для краткости |
Doraemon,
все функции проверки должны возвращать true если всё ок , как работают функции clearElement и writeTo известно только вам |
С ними все ок, поэтому я их опустила.
https://www.dropbox.com/s/i9pgy0v8dc...dache.rar?dl=0 здесь мой полный код. Что интересно, сейчас, когда я кое-что исправила (к лучшему...), выдает ошибку всегда и не дает перейти на другую страницу. |
Скорее всего overallcheck попросту вываливается где-то по ошибке, а ТС в консоль не догадается заглянуть.
|
Цитата:
Цитата:
|
Цитата:
var valid=function(el){ var pat=el.getAttribute('pattern'); if(!pat) return true; pat= new RegExp(pat); /* тут я не помню каким методом надо проверять, exec или test в общем если проверка по шаблону не проканала, то */ throw el.getAttribute('err'); else return true; }; try{ for(var el,elems=form.elements;el=elems[i];i++) valid(el); } catch (e){ problemArea.textContent=e; return false; } Таким образом на рендере формы вы забиваете атрибуты паттерн и ерр данными из модели формы. |
Цитата:
Чтобы форма не сабмитилась, нужно вернуть фолс в онсабмит. Если форма уходит, то значит нет фолса, надо смотреть куда пропал. |
kostyanet,
не понял в вашем скрипте ничего, может пример покажите? |
Цитата:
|
Да, ТС хочет сразу все ерроры показать, ну то есть правильно. Тогда их надо собрать в массив
if(!pat.exec(el.value)) /* или как там правильно */ err.push(el.getAttribute('err'); /* и на выходе */ if(err.length) throw err.join('<br>'); else return true; Прохфессору. Мне вообще по барабану почему у товарища форма уходит, ну вообще, я просто хочу показать как делается в стопицот раз проще, а не как добить тот гавнокод который он придумал до рабочего состояния. |
А, ну да, а я не заметил в хайлайте хтмля что они есть, эти неведомые проверки.
Ну собственно тру не обязательно возвращать, тогда надо проверять конкретно на фолс. Ну, надо было бы, если добивать эту калоидную массу. |
Нашел как правильно проверять валуе по паттерну
if(pat && !new RegExp(pat).test(elem.value)) throw elem.getAttribute('e'); Вопрос где взять паттерны - на паттерно-генераторных сайтах. |
kostyanet,
вопрос для кого пишите свои обрывки кода? без примеров они так и обрывками останутся, собрать их в рабочий пример кроме вас некому, а значит ни алгоритма никто не увидит, ни образца для копипаста. |
Цитата:
Не волуйтесь, без вашей помощи кому надо жить - разберутся и соберут и запустят. А кому не надо жить - тех вы придете и эватаназируете своими готовыми примерами. Все просто. Кроме того есть форум, тема, клава и умение печатать вопросы чтобы получить уточнение по решению. Вы что, реально не врубаетесь что конкретные коды это унылое бесконечное бессмысленное занятие. А поиск и нахождение решений, новых решений - это интересное и осмысленное и эффективное занятие. |
В своей практике не припомню случая чтоб я смог воспользоваться конкретным кодом. Всегда приходится подгонять, переделывать или вообще переделывать оставляя только действующее вещество - то самое решение.
Ну нахера писать на каждое поле - функцию? Ну то есть вы видите что сделано через жопу и рассуждаете в таком порядке, типа: автору надо сделать через жопу, а я должен ему помочь сделать через жопу. Вопрос - а зачем помогать делать через жопу, если вы знаете как сделать нормально? Или не знаете? Или это не через жопу? Хотя бы сама логика проверки должна была предостеречь помогать косячить. Я понимаю что есть такая идея, что каждый дурак имеет право на свое мнение. Так вот, не только дурак - умные тоже имеют право на свое мнение. Или такое право только у дураков? Ну вот, следовательно если вы считаете что каждый дурак имеет право на свое мнение, то я считаю своим правом сказать дураку - не дури, это вот так вот делается, или вот так вот, а вовсе не так как ты дятель придумал не проверяя как оно делается вообще. Так понятно или будете продолжать ныть? |
Да, бывает надо посмотреть скрипт в работе. Математику какую-нить или активность интерфейса. Но тут какие нафик песочницы? Паттерны вообще дело интимное, иначе бы захером были сайты для их генерации. Нагеренил на все случаи жизни и закрывай лавочку.
Я уж не говорю об автоматической, браузерной валидации. Она более-менее работает. На простые формы типа такой - проканает запросто. А сложные - особенно когда там файлы подключаются - надо самому проверять. Но опять же сценарий проверки куда пихать? В эти функции что ли? Нафига, если есть атрибуты куда можно что хочешь запузырить. |
Цитата:
Цитата:
|
Цитата:
Кстати, самая мякотка это сделать форму кнопка Отправить которой разблокируется как только все нужное введено и введено правильно. Старая добрая логика десктоп-приложений на вебе не так просто дается. Вы не понимаете сущности таких площадок. Это вовсе не варехауз хераты на каждый чих. Просто потому что на каждый чих никакого варехауза не хватит. Такие площадки служат для обмена идеями, для поиска и отработки решений и для обсуждения этих самых идей и решений. Подразумевается что готовый код каждый сам себе сделает как ему покажется наилучшим, в своем стиле, в своем контексте и так далее. Программирование - это искусство, тут не может быть шаблонов. Поэтому вы не можете собрать такую валидацию, у вас нет сведений о правилах. Они есть у ТС - она профтыкает и все. |
Кстати, местный варехауз вроде сковырнулся, да?
И еще кстати, за все время ничем не удалось воспользоваться с гитхаба, сколько не старался. Только phpmailer утянул целиком, но и то подлючил только транспорт, без смтп. |
Цитата:
что это Цитата:
|
Задавайте вопросы что вам не ясно в валидации по паттернам.
? ? сковырнулся же говорю. Кстати, на html5pattern.com про валидацию поля типа email пишут что дескать оставим его на совесть браузерописателей. Потому что реально проверить имейл конечно нельзя. Но никто не запрещает проверить его на 1 собаку и минимум 1 точку - что у большинства и имеется. Особенно на точки, то есть на запятые, поскольку эти знаки на клаве рядом. |
kostyanet,
а что такое местный варехауз ? |
Ну это где были все скрипты, например про бесконечновложенное меню - если ссылку нажать там написано что песочница высыпалась в карстовую воронку.
|
|
kostyanet,
Data_form_validation ок! вот бы вы, да как там :lol: |
Походу рони дунул :)
|
Это просто симфония, а не топик :lol: Ох, кажется я от хохота себе диафрагму потянул :(
|
kostyanet,
то есть просьба писать внятно, как примерах по вашей ссылке, для вас что-то неадекватное? |
Это просто разница тезаурусов. Начав разбирать ваш русский по правилам консеквента и антецедента, я тоже порву диафрагму. Вы же редуцируете примерно 90% слов.
Ссылка была специально для вас, поскольку вы никак не хотели понять как забить в хтмл атрибуты и по ним вести валидацию на нормальном уровне абстракции. Причем не важно будет это pattern или просто p, если никакой помощи от браузера в этом деле вы не ждете. |
Без паттернов в принципе можно обойтись. Получится несколько жирнее. Надо определять тип инпута - по типу выбирать правило или посылать в нужную функцию.
И тут есть засада с атрибутом type. Для некоторых кошерных типов типа select нельзя брать тип с помощью getAttribute, потому что браузер компилит селекты до select-one и select-multiple. Упыри. С другой стороны все типы которые браузер нипонял превратятся в text. Приходится делать вот так, запомните или запишите: type=elem.getAttribute('type') || elem.type; |
Часовой пояс GMT +3, время: 00:38. |