Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Validation script (https://javascript.ru/forum/dom-window/55996-validation-script.html)

Doraemon 25.05.2015 00:13

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>

рони 25.05.2015 00:20

Doraemon,
что такое
Цитата:

Сообщение от Doraemon
writeTo

и зачем
Цитата:

Сообщение от Doraemon
42 }


Doraemon 25.05.2015 00:24

WriteTo пишет сообщение об ошибке в поле для ошибок.
42 я что-то нигде не вижу...

рони 25.05.2015 00:32

Doraemon,
строка 42 там у вас фигурная скобка зачем ?
Цитата:

Сообщение от Doraemon
WriteTo пишет сообщение об ошибке в поле для ошибок.

где эта программа и куда она пишет?

Doraemon 25.05.2015 00:39

Спасибо! поправила скобку, но проблема осталась прежней.
Насчет поля для ошибок, см. строку 78.
Кои-какие неважные куски кода я убрала для краткости

рони 25.05.2015 01:58

Doraemon,
все функции проверки должны возвращать true если всё ок ,
как работают функции clearElement и writeTo известно только вам

Doraemon 25.05.2015 02:24

С ними все ок, поэтому я их опустила.
https://www.dropbox.com/s/i9pgy0v8dc...dache.rar?dl=0
здесь мой полный код.
Что интересно, сейчас, когда я кое-что исправила (к лучшему...), выдает ошибку всегда и не дает перейти на другую страницу.

kostyanet 26.05.2015 14:44

Скорее всего overallcheck попросту вываливается где-то по ошибке, а ТС в консоль не догадается заглянуть.

рони 26.05.2015 14:51

Цитата:

Сообщение от kostyanet
Скорее всего overallcheck попросту вываливается где-то по ошибке, а ТС в консоль не догадается заглянуть.

решение давно было подсказано
Цитата:

Сообщение от рони
все функции проверки должны возвращать true если всё ок

когда ТС добавит return true, проблема исчезнет . а вам как всегда лишь бы брякнуть.

kostyanet 26.05.2015 14:55

Цитата:

Сообщение от Doraemon
Я написала простой скрипт

Это не простой скрипт. Вот такой вот простой:

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 26.05.2015 14:57

Цитата:

Сообщение от рони
когда ТС добавит return true

Там все есть - ретурн тру. Судя по ! перед вызовами неведомых функций - они тоже возвращают что-то понятное.

Чтобы форма не сабмитилась, нужно вернуть фолс в онсабмит. Если форма уходит, то значит нет фолса, надо смотреть куда пропал.

рони 26.05.2015 14:59

kostyanet,
не понял в вашем скрипте ничего, может пример покажите?

рони 26.05.2015 15:01

Цитата:

Сообщение от kostyanet
Там все есть - ретурн тру.

нет там никакго true, мистер всезнайка. глянь в строку 36 и строку 42 первого поста.

kostyanet 26.05.2015 15:06

Да, ТС хочет сразу все ерроры показать, ну то есть правильно. Тогда их надо собрать в массив

if(!pat.exec(el.value)) /* или как там правильно */
  err.push(el.getAttribute('err');

/* и на выходе  */

if(err.length)
  throw err.join('<br>');
  else
return true;


Прохфессору. Мне вообще по барабану почему у товарища форма уходит, ну вообще, я просто хочу показать как делается в стопицот раз проще, а не как добить тот гавнокод который он придумал до рабочего состояния.

kostyanet 26.05.2015 15:10

А, ну да, а я не заметил в хайлайте хтмля что они есть, эти неведомые проверки.

Ну собственно тру не обязательно возвращать, тогда надо проверять конкретно на фолс. Ну, надо было бы, если добивать эту калоидную массу.

kostyanet 26.05.2015 15:14

Нашел как правильно проверять валуе по паттерну

if(pat && !new RegExp(pat).test(elem.value))
 throw elem.getAttribute('e');


Вопрос где взять паттерны - на паттерно-генераторных сайтах.

рони 26.05.2015 15:33

kostyanet,
вопрос для кого пишите свои обрывки кода? без примеров они так и обрывками останутся, собрать их в рабочий пример кроме вас некому, а значит ни алгоритма никто не увидит, ни образца для копипаста.

kostyanet 26.05.2015 15:38

Цитата:

Сообщение от рони
собрать их в рабочий пример кроме вас некому,

Вы что себя скорой помощью дебилам видите? Типа такой доктор ДуЛитлКод или там СкриптБолит?

Не волуйтесь, без вашей помощи кому надо жить - разберутся и соберут и запустят. А кому не надо жить - тех вы придете и эватаназируете своими готовыми примерами. Все просто.

Кроме того есть форум, тема, клава и умение печатать вопросы чтобы получить уточнение по решению.

Вы что, реально не врубаетесь что конкретные коды это унылое бесконечное бессмысленное занятие. А поиск и нахождение решений, новых решений - это интересное и осмысленное и эффективное занятие.

kostyanet 26.05.2015 15:44

В своей практике не припомню случая чтоб я смог воспользоваться конкретным кодом. Всегда приходится подгонять, переделывать или вообще переделывать оставляя только действующее вещество - то самое решение.

Ну нахера писать на каждое поле - функцию? Ну то есть вы видите что сделано через жопу и рассуждаете в таком порядке, типа: автору надо сделать через жопу, а я должен ему помочь сделать через жопу.

Вопрос - а зачем помогать делать через жопу, если вы знаете как сделать нормально? Или не знаете? Или это не через жопу?

Хотя бы сама логика проверки должна была предостеречь помогать косячить. Я понимаю что есть такая идея, что каждый дурак имеет право на свое мнение. Так вот, не только дурак - умные тоже имеют право на свое мнение. Или такое право только у дураков? Ну вот, следовательно если вы считаете что каждый дурак имеет право на свое мнение, то я считаю своим правом сказать дураку - не дури, это вот так вот делается, или вот так вот, а вовсе не так как ты дятель придумал не проверяя как оно делается вообще.

Так понятно или будете продолжать ныть?

kostyanet 26.05.2015 15:56

Да, бывает надо посмотреть скрипт в работе. Математику какую-нить или активность интерфейса. Но тут какие нафик песочницы? Паттерны вообще дело интимное, иначе бы захером были сайты для их генерации. Нагеренил на все случаи жизни и закрывай лавочку.

Я уж не говорю об автоматической, браузерной валидации. Она более-менее работает. На простые формы типа такой - проканает запросто. А сложные - особенно когда там файлы подключаются - надо самому проверять. Но опять же сценарий проверки куда пихать? В эти функции что ли? Нафига, если есть атрибуты куда можно что хочешь запузырить.

рони 26.05.2015 16:03

Цитата:

Сообщение от kostyanet
Не волуйтесь, без вашей помощи кому надо жить - разберутся и соберут и запустят.

я не разобрался, а значит не могу не собрать не запустить
Цитата:

Сообщение от kostyanet
Кроме того есть форум, тема, клава и умение печатать вопросы.

я вас прошу делать рабочие примеры, вы это игнорируите, ваши обрывки кода и жаргон мне непонятны.

kostyanet 26.05.2015 16:21

Цитата:

Сообщение от рони
я не разобрался, а значит не могу не собрать не запустить

Щито? Типа все остальные тупее вас? Милое откровение, честно говоря даже толику уважения вызвало за мужество заявить такое.

Кстати, самая мякотка это сделать форму кнопка Отправить которой разблокируется как только все нужное введено и введено правильно. Старая добрая логика десктоп-приложений на вебе не так просто дается.

Вы не понимаете сущности таких площадок. Это вовсе не варехауз хераты на каждый чих. Просто потому что на каждый чих никакого варехауза не хватит. Такие площадки служат для обмена идеями, для поиска и отработки решений и для обсуждения этих самых идей и решений. Подразумевается что готовый код каждый сам себе сделает как ему покажется наилучшим, в своем стиле, в своем контексте и так далее.

Программирование - это искусство, тут не может быть шаблонов. Поэтому вы не можете собрать такую валидацию, у вас нет сведений о правилах. Они есть у ТС - она профтыкает и все.

kostyanet 26.05.2015 16:26

Кстати, местный варехауз вроде сковырнулся, да?

И еще кстати, за все время ничем не удалось воспользоваться с гитхаба, сколько не старался. Только phpmailer утянул целиком, но и то подлючил только транспорт, без смтп.

рони 26.05.2015 16:37

Цитата:

Сообщение от kostyanet
Щито? Типа все остальные тупее вас?

где это написано мной??? прежде всего, я сам бы хотел понять, о чём вы пишите. но ваше искусство мне недоступно.
что это
Цитата:

Сообщение от kostyanet
местный варехауз вроде сковырнулся

?

kostyanet 26.05.2015 16:40

Задавайте вопросы что вам не ясно в валидации по паттернам.

? ? сковырнулся же говорю.

Кстати, на html5pattern.com про валидацию поля типа email пишут что дескать оставим его на совесть браузерописателей. Потому что реально проверить имейл конечно нельзя. Но никто не запрещает проверить его на 1 собаку и минимум 1 точку - что у большинства и имеется. Особенно на точки, то есть на запятые, поскольку эти знаки на клаве рядом.

рони 26.05.2015 16:41

kostyanet,
а что такое местный варехауз ?

kostyanet 26.05.2015 16:47

Ну это где были все скрипты, например про бесконечновложенное меню - если ссылку нажать там написано что песочница высыпалась в карстовую воронку.

kostyanet 26.05.2015 17:14

https://developer.mozilla.org/en-US/...orm_validation

рони 26.05.2015 17:41

kostyanet,
Data_form_validation ок! вот бы вы, да как там :lol:

kostyanet 26.05.2015 17:43

Походу рони дунул :)

Sigizmund2012 26.05.2015 17:45

Это просто симфония, а не топик :lol: Ох, кажется я от хохота себе диафрагму потянул :(

рони 26.05.2015 17:46

kostyanet,
то есть просьба писать внятно, как примерах по вашей ссылке, для вас что-то неадекватное?

kostyanet 26.05.2015 20:37

Это просто разница тезаурусов. Начав разбирать ваш русский по правилам консеквента и антецедента, я тоже порву диафрагму. Вы же редуцируете примерно 90% слов.

Ссылка была специально для вас, поскольку вы никак не хотели понять как забить в хтмл атрибуты и по ним вести валидацию на нормальном уровне абстракции. Причем не важно будет это pattern или просто p, если никакой помощи от браузера в этом деле вы не ждете.

kostyanet 26.05.2015 20:48

Без паттернов в принципе можно обойтись. Получится несколько жирнее. Надо определять тип инпута - по типу выбирать правило или посылать в нужную функцию.

И тут есть засада с атрибутом type. Для некоторых кошерных типов типа select нельзя брать тип с помощью getAttribute, потому что браузер компилит селекты до select-one и select-multiple. Упыри. С другой стороны все типы которые браузер нипонял превратятся в text.

Приходится делать вот так, запомните или запишите:

type=elem.getAttribute('type') || elem.type;


Часовой пояс GMT +3, время: 00:38.