Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Странная ситуация. (https://javascript.ru/forum/misc/7864-strannaya-situaciya.html)

igsavenko 22.02.2010 22:21

Странная ситуация.
 
Здравствуйте всем! Делаю регистрацию на JavaScript используя jQuery вот такой вопрос. С JS работаю буквально несколько недель, вот пытаюсь разобраться. Есть несколько полей ввода где на событие onBlur (показано ниже) идет проверка на корректность и присутствие в базе данных.

Проблема следующая:
$(document).ready(function() {

	$('#aboutLogin').hide();
	$('#checkName').hide();
	$('#checkSurname').hide();	
	$('#result_check').hide();
	
	$('#checkMailDiv').hide();
    $('#e_mailEdit').blur( checkMail );
	$('#checkLoginDiv').hide();
    $('#loginEdit').blur( checkLogin );
})
;

после того как все поля введены (функции проверки логина и пароля работаю корректно), функции проверки возвращают true или false, это сделано для того чтобы после того как пользователь перейдет к следующему шагу регистрации, то есть примет форму вызывается функция check_all.

Форма принимается следующим образом:
<form method="post" name="regForm"  onsubmit="check_all(); return false;">
...
//Изначально этот див скрыт и если при проверки всех полей регистрации возникает ошибка то этот div становится видимый (функция проверки ниже)
<div id = "result_check"><font color="#FF0000">При заполнении данных возникла ошибка</font></div>
<input type="submit" value="Продолжить регистрацию">
</form>


function check_all()
{
	var chN = checkName();
	var chM = checkMail();
	var chS = checkSurname();
	var chL = checkLogin();
	if(!chN || !chM || !chL || !chS)
		$('#result_check').fadeIn();
	else
	{
		$('#result_check').fadeOut();
	}
}

Вот изображение до нажатия на кнопку продолжения регистрации:

После нажатия:

Как я уже писал каждая функция проверки работает нормально но когда я нажимаю на кнопку Продолжить регистрацию, почему то возле поля с e-mail появляется надпись Ошибка при вводе. Данная ошибка должна появляться только в том случае если e-mail введен не верно, а именно не прошел проверку на регулярное выражение.

Вот функция проверки e-mail:
function checkMail() {
    var mailValue = this.value;
    var mailExp = /^[a-zA-Z0-9_\.\-]+\@[a-zA-Z0-9\.\-]+\.[a-zA-Z0-9]{2,6}$/;
 	$('#checkMailDiv').fadeOut();
    if ( mailExp.test(mailValue) ) {
        //Обращаемся к серверу для проверки
		$.ajax({ // первый ajax запрос, определяющий количество данных
      		url: "check_mail.php",
      		global: false,
			type: "POST",
      		beforeSend: function(){
      			$('#checkMailDiv').html('<img alt="" border="0" src="/images/animation.gif" align="absmiddle"></img>').fadeIn();
      		},
			data: {mailEdit: $('#e_mailEdit').val()}, // Передаём страницу для запроса к mysql
      		dataType: "json",
      		success: function (data)
			{
				if(data.success == true)
				{
					$('#checkMailDiv').html("<img title='"+data.message+"' border='0' src='images/"+data.images+"' align='absmiddle'></img>").fadeIn();
					return true;
				}
				else
				{
					$('#checkMailDiv').html("<img title='"+data.message+"' border='0' src='images/"+data.images+"' align='absmiddle'></img> E-mail занят другим пользователем").fadeIn();
					return false;
				};
			}
			});
    } else {
        //Ищем <div> в который будет выведен отрицательный ответ
       $('#checkMailDiv').html("<img alt='Пожалуйста, проверьте ваш e-mail!' border='0' src='/images/reg_error.png' align='absmiddle'>Ошибка при вводе (Скрипт).").fadeIn();
		return false;
    }
}


Подскажите пожалуйста почему так происходит? Почему после принятия формы, функция проверки e-mail не срабатывает и возвращает false, хотя функция проверки аналогична она срабатывает. Спасибо!

igsavenko 22.02.2010 23:39

Ну в общем я разобрался... только вот куда тему девать? :)
function checkMail() {
var mailValue = this.value;
}
Проблема была в этой строчке!

Еще один вопрос в до гонку, как теперь мне данные которые в форме, передать в другой php скрипт и перейти к странице этого скрипта. Я такого никогда не делал, что форма обрабатывается таким способом! Подскажите?

limonad 23.02.2010 00:02

В тег form добавьте атрибут action. Должно выглядеть примерно так:
<form method="post" action="drugoj.php" name="regForm"  onsubmit="check_all(); return false;">

igsavenko 23.02.2010 08:00

Такой вариант не будет работать, так как у формы есть onsubmit="check_all(); return false;", а конкретнее return false.
Сделал следующее:
<form method="post" name="regForm" action = "step2.php"  onsubmit="var a = check_all(); return a;">

И в функции добавил:
function check_all()
{
 var chN = checkName();
 var chM = checkMail();
 var chS = checkSurname();
 var chL = checkLogin();
 if(!chN || !chM || !chL || !chS)
 {
       $('#result_check').fadeIn();
       return false;
  }
  else
  {
       $('#result_check').fadeOut();
      return true;
  }
}

limonad 23.02.2010 09:09

Можно onsubmit="var a = check_all(); return a;" заменить на: onsubmit="return check_all(); "

igsavenko 23.02.2010 10:04

Тоже верно... спасибо!


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