Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   функция проверки форм не возвращает false (https://javascript.ru/forum/misc/18333-funkciya-proverki-form-ne-vozvrashhaet-false.html)

voodoo 26.06.2011 23:15

функция проверки форм не возвращает false
 
Вообщем, есть вот такая функция:
<script language="JavaScript" type = "text/javascript">
function checkfields()
{

var message="Заполните следующие формы";
var check=1;
if(document.getElementsByName("add_name_ru").value=="")
{
	message+="\nНазвание (RU)";
	check=0;
}
if(document.getElementsByName("add_name_uk").value=="")
{
	message+="\nНазвание (UK)";
	check=0;
}
if(document.getElementsByName("add_name_us").value=="")
{
	message+="\nНазвание (US)";
	check=0;
}
if(document.getElementById("add_anot_ru").value=="")
{
	message+="\nОписание (RU)";
	check=0;
}
if(document.getElementsByName("add_anot_uk").value=="")
{
	message+="\nОписание (UK)";
	check=0;
}
if(document.getElementsByName("add_anot_us").value=="")
{
	message+="\nОписание (US)";
	check=0;
}
if(document.getElementsByName("add_body_ru").value=="")
{
	message+="\nНовость (RU)";
	check=0;
	return false;
}
if(document.getElementsByName("add_body_uk").value=="")
{
	message+="\nНовость (RU)";
	check=0;
}
if(document.getElementsByName("add_body_us").value=="")
{
	message+="\nНовость (US)";
	check=0;
}
if(check==0)
{
	alert(message);
	return false;
}
else
	return true;
}
</script>

Проверяет каждую форму, формирует конечную ошибку и должна вывести конечную ошибку.

<form action="add.php" method="POST" enctype="multipart/form-data" onsubmit="checkfields()"> 
<table class="border_none">
	<tr>
		<td class="border_none">Название (RU)</td>
		<td class="border_none"><input type="text" name="add_name_ru" size="50"></td>
	</tr>
	<tr>
		<td class="border_none">Название (UK)</td>
		<td class="border_none"><input type="text" name="add_name_uk" size="50"></td>
	</tr>
	<tr>
		<td class="border_none">Название (US)</td>
		<td class="border_none"><input type="text" name="add_name_us" size="50"></td>
	</tr>
	<tr>
		<td class="border_none">Описание (RU)</td>
		<td class="border_none"><input type="text" name="add_anot_ru" size="50"></td>
	</tr>
	<tr>
		<td class="border_none">Описание (UK)</td>
		<td class="border_none"><input type="text" name="add_anot_us" size="50"></td>
	</tr>
	<tr>
		<td class="border_none">Описание (US)</td>
		<td class="border_none"><input type="text" name="add_anot_uk" size="50"></td>
	</tr>
	<tr>
		<td class="border_none">Новость (RU)</td>
		<td class="border_none"><textarea rows="10" cols="45" name="add_body_ru"></textarea></td>
	</tr>
	<tr>
		<td class="border_none">Новость (UK)</td>
		<td class="border_none"><textarea rows="10" cols="45" name="add_body_uk"></textarea></td>
	</tr>
	<tr>
		<td class="border_none">Новость (US)</td>
		<td class="border_none"><textarea rows="10" cols="45" name="add_body_us"></textarea></td>
	</tr>
	<tr>
		<td class="border_none">Выводить новость</td>
		<td class="border_none"><SELECT name="show_news">
		  <option value="yes">Да
		  <option value="no">Нет  
		  </SELECT></td>
	</tr>
	<tr>
		<td class="border_none">Выводить описание</td>
		<td class="border_none"><SELECT name="show_anot">
		  <option value="yes">Да
		  <option value="no">Нет  
		  </SELECT></td>
	</tr>
</table>
<center><input type="submit" name="addnews_button" value="Добавить"></center>


Но всё равно, форма срабатывает, пустые данные передаются.

В чём может быть проблема?
Заранее спасибо.

melky 27.06.2011 00:31

подпишите то,что подчеркнуто

точнее, return в обработчик onsubmit
<form action="add.php" method="POST" enctype="multipart/form-data" onsubmit="*!*return*/!* checkfields()">

voodoo 27.06.2011 00:49

раньше был дописан return, но всё равно не работало =)
По сути дела он там и не нужен

melky 27.06.2011 00:53

ну тогда Firebug тебе в руки

пиши в начале функции debugger и следи за исполнением кода, нажимая на F10

обычный дебаг ) ничего страшного. я код на тайм-аут каруселях так дебажил.

voodoo 27.06.2011 01:53

ReferenceError: emptyfield is not defined

переменную check заменил на emptyfield, на всякий пожарный, вдруг зарезервированное слово, но всё равно не работает. Странно, переменная объявлена, но её не видно %)

По этому и checkfields возвращает true.


-----
Народ, я понимаю что уже ночь и порой даже влом, но утром мне надо диплом сдавать, а эта функция и теория по javascript даёт хороший объём текста) помогите пожалуйста =)

ASerputko 27.06.2011 11:55

<script language="JavaScript" type = "text/javascript">
function checkfields () {
	var message="Заполните следующие формы";
	var check=1;
	console.log(document.getElementsByName("add_name_ru")[0])
	if (document.getElementsByName("add_name_ru")[0].value=="") {
		message+="\nНазвание (RU)";
		check=0;
	}
	
	if (document.getElementsByName("add_name_uk")[0].value=="") {
		message+="\nНазвание (UK)";
		check=0;
	}
	
	if (document.getElementsByName("add_name_us")[0].value=="") {
		message+="\nНазвание (US)";
		check=0;
	}
	
	if (document.getElementsByName("add_anot_ru")[0].value=="") {
		message+="\nОписание (RU)";
		check=0;
	}
	
	if (document.getElementsByName("add_anot_uk")[0].value=="") {
		message+="\nОписание (UK)";
		check=0;
	}
	
	if (document.getElementsByName("add_anot_us")[0].value=="") {
		message+="\nОписание (US)";
		check=0;
	}
	
	if (document.getElementsByName("add_body_ru")[0].value=="") {
		message+="\nНовость (RU)";
		check=0;
	}
	
	if (document.getElementsByName("add_body_uk")[0].value=="") {
		message+="\nНовость (RU)";
		check=0;
	}

	if (document.getElementsByName("add_body_us")[0].value=="") {
		message+="\nНовость (US)";
		check=0;
	}
	
	if (check == 0) {
		alert(message);
		return false;
	} else {
		return true;
	}
}
</script>


после document.getElementsByName("...") забыли поставить [0]
+ тут идет поиск по Id, хотя стоит по Name
if(document.getElementById("add_anot_ru").value=="")
{
    message+="\nОписание (RU)";
    check=0;
}

melky 27.06.2011 13:14

нет, там поиск по name
<input type="text" name="add_name_ru" size="50">


извините, нолик изза стены кода не заметил

вместо этой огромной функции можно написать это

document.forms[ 0 ].add_name_ru.value

вот вам живой тест

<form action="add.php" method="POST" enctype="multipart/form-data"> 

		<input type="text" name="add_name_ru" size="50" value="TEST-VALUE"> 
</form>
<script>
alert( document.forms[ 0 ].add_name_ru.value )
</script>



Цитата:

Сообщение от voodoo (Сообщение 110672)
По этому и checkfields возвращает true.

если говорить верно, то она ничего не возвращает :) возникает исключение, а потом всё идет своим чередом.. как без JS


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