Подскажите с функцией Яваскрипт

Focus

Новичок
Подскажите с функцией Яваскрипт

Здравстуйте!

Подскажите как можно реализовать следущее:

Есть форма из 10 текстовых полей в каждом поле тоит на событие onblur обработчик ввода данных на яваскрите.
тоесть к этим 10 полям есть 10 ява-скрипт функций.
Теперь надо написать функцию которая проверятет форму перед отправкой Можно ли как-то использовать те функции которые уже написаны? Интуитивно чувствую что да, но как?
 

pilot911

Новичок
кажется, так:

в самом начале страницы определи флаг типа

var can_submit = true;

потом, когда происходит событие onblur и обработчик определил, что данные в поле неправильные - то в этом обработчике ставь флаг в false

ну и в самой форме в onsubmit="if (!can_submit) return false;"
 

Focus

Новичок
Делаю так:
все 10 функций которые проверяют поля возвращают или тру или фолс.

В форме пишу: onsubmit="return check_form();">

function check_form()
{
can_sbm= return check_email(document.regForm['email'].value);
................. и так 10 полей
return can_sbm!=0;

}

Сначала думал нормально, в таком варианте происходит отправка: 9 полей - false, 10 - true

Как поступить? can_sbm завязать на масив?
 

pilot911

Новичок
можно сделать через if
PHP:
function check_form() {
   
     if (!check_email(document.regForm['email'].value)) return false;
     else if (!check_email_1(document.regForm['email'].value)) return false;
     else if (!check_email_2(document.regForm['email'].value)) return false;

     return true;
}

или

function check_form() {
   
     if (!check_email(document.regForm['email'].value) || 
         !check_email_1(document.regForm['email'].value) ||
         !check_email_2(document.regForm['email'].value)) return false;

     return true;
}
 

Focus

Новичок
В Вашем варианте мне наверное не подойдет. ,Так как Вы написали будет отображаться по одной ошибке, а мне надо чтобы вывалило все ошибки полей, которые допустил юзер..
 

pilot911

Новичок
Автор оригинала: Focus
В Вашем варианте мне наверное не подойдет. ,Так как Вы написали будет отображаться по одной ошибке, а мне надо чтобы вывалило все ошибки полей, которые допустил юзер..
понятно... ну тогда, наверное, так:


function check_form() {
var can_submit = true;

if (check_email(document.regForm['email'].value)==false)
can_submit = false;


if (check_email_1(document.regForm['email'].value)==false)
can_submit = false;

if (check_email_2(document.regForm['email'].value)==false)
can_submit = false;


return can_submit==true;
}
 

Focus

Новичок
if (check_email_2(document.regForm['email'].value)==false && can_submit)
Подскажите пожалуйста а для чего в иф Вы объединяете основное выражение с && can_submit ?
Ведь по идее должно и без него работать?
 

Focus

Новичок
А еще подскажите пожалуйста.
В некоторых формах проверки данных я использую библиотеку xajax Например поле логин:
onblur="xajax_check_login(document.regForm['login'].value)"
На сервере проверяю есть ли в базе уже такой логин + проверка на допустимые символы
В результате проверки я отдаю в страницу $text:
PHP:
$objResponse = new xajaxResponse();
$objResponse->setCharEncoding('windows-1251');
$objResponse->addAssign("login_label", "innerHTML", $text);
return $objResponse;
где $text это рисунок с текстом
В самой странице (хтмл) мне пишет
function xajax_check_login(){return xajax.call("check_login", arguments, 1);}

Как теперь в моем обработчике формы check_form проверить этой же аякс-функцией поле с логином?

-~{}~ 26.02.09 17:11:

Посомтрел что возвращает эта аякс функция - она все время возвращает true

alert(xajax_check_login(document.regForm['login'].value));
 

pilot911

Новичок
понятно... в общем, проблема в том, что ты действуешь не совсем последовательно

если через ajax - то эта функция должна не только писать innerHTML, но и указать в скрипте переменной can_submit какое-то значение

отсюда у тебя два изменения:

PHP:
$objResponse->addAssign("login_label", "innerHTML", $text); 
if ($error)
      $objResponse->script (уточни синтаксис в xajax) ('can_submit=false;');

и

PHP:
     var can_submit = true;

     function check_form() {

          xajax_check_login_1(document.regForm['login'].value);
          xajax_check_login_2(document.regForm['login'].value);
          xajax_check_login_3(document.regForm['login'].value); 

          return can_submit==true;
}
 

Focus

Новичок
Аякс решил пока не трогать. Тут проблема нарисовалась - проверка не работает в ИЕ 7.05 Форму сразу отправляет. В мозилле же все нормально. В опере тоже..
 

pilot911

Новичок
ну значит onsubmit не получает false как результат работы функции
 

Focus

Новичок
А почему в разных браузерах onsubmit получает разные значения? Как обобщить?

-~{}~ 26.02.09 20:10:

Подскажите почему в ИЕ не выполняется следующий яваскрипт код(форма отправляется, хотя не ввожу данные, которые не должны пускать). В мозилле все работает
PHP:
function check_asc(id, quest)
	{
		if(id=="")
			{
				document.getElementById('asc_no').style.display='block';
				return false;
			}
		else
			{
				document.getElementById('asc_no').style.display='none';
				return true;
			}
	}	

function check_form()
	{
		var can_submit = true;
		if (check_asc(document.regForm['asc'].value, document.regForm['hid_question'].value)==false)	{	can_submit=false;	}		
		if(can_submit==true)	{	return true; }	else	{	return false;	}	
	}
<form method="post" name="regForm" id="regForm" onsubmit="return check_form();">
 

dimagolov

Новичок
Focus, пользуй document.getElementById('asc'), a не document.regForm['asc']. при этом 'asc' должно быть одновременно и id и name
 

Focus

Новичок
поменял как Вы сказали все на getElementById, попрописывал нужные id кругом.. ничего не изменилось ИЕ по прежнему отправляет форму
 

dimagolov

Новичок
Focus, можно пойти от обратного. не ловить onsubmit, а просто не иметь input type=submit, а иметь type=button, на котором ловить onclick и по нему делать или нет form.submit();
 

Focus

Новичок
Народ а подскажите аналог firebug для IE На сайте что-то firebug lite для ie что-то недоступен
 
Сверху