Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Помогите новичку! (https://javascript.ru/forum/jquery/7098-pomogite-novichku.html)

igsavenko 15.01.2010 01:40

Помогите новичку!
 
Здравствуйте Все! Начал изучать JavaScript, jQuery... Ну и решил начать с модернизации моего сайта, а именно с создания более красивой и грамотной регистрации (проверки e-mail для начала) с использование JavaScript, потом наткнулся на JQuery и решил объединить красивое с полезным.
Идея такова, e-mail считается верным, если он прошел проверку в регулярных выражениях, а также если его нет в базе данных, вот что у меня получилось:
function checkMail()
{
	var mailValue = document.getElementById("e_mailEdit");
	var mailExp = /^[a-zA-Z0-9_\.\-]+\@[a-zA-Z0-9\.\-]+\.[a-zA-Z0-9]{2,6}$/;
	checkRes = mailValue.value.match(mailExp);
	if(checkRes != null)
	{
		//Обращаемся к серверу для проверки
		$(document).ready(function() {
			$('#e_mailEdit').blur(function() {
				jQuery.post('/checkReg.php',{e_mailEdit: $('#e_mailEdit').val()},
				function(data) {
					if(data.success == true)
					{
						$('#checkMailDiv').html(data.message);
						
					}
					else if(data.success == false)
					{
						$('#checkMailDiv').html(data.message);
					};
				},'json');
			});
		});
	}
	else if(checkRes == null)
	{
		//Ищем <div> в который будет выведен отрицательный ответ
		$('#checkMailDiv').html("You should check e-mail and try again.");
	}
}
</script>


<form method="post" name="regForm" action="index.php">
<table align="center" cellpadding="0" cellspacing="0" width = "400">
<tr>
	<td width="15%">E-mail:</td>
    <td width="5%">*</td>
	<td width="40%"><input type="text" id = "e_mailEdit" onBlur="checkMail();"></td>
    <!-- В базе данных e-mail является уникальным. Если пользователь ввел уже зарегистрированый почтовый ящик предложить восстановить пароль и вывести сообщение об ошибки -->
    <td width="40%"><div id="checkMailDiv"></div></td>
</tr>
</table>
</form>


<?php
	include "connect.php";
	if($_POST)
	{
		if(!empty($_POST['e_mailEdit']))
		{
			mailCheck($_POST['e_mailEdit']);
		}
		else
		{
			$mailEmpty = "You must enter e-mail address";
			echo $mailEmpty;
		}
	}
	
	function mailCheck($mailIn)
	{
		//$mc = db_connect();
		//$result = mysql_query("SELECT id FROM users WHERE e_mail = '"+$mailIn+"'",$mc);
		//Отлаживал скрипт, временно кбрал проверку на существование в базе данных
		if(1>0)
		{
			$data['success'] = true;
			$data['message'] = 'All right';
			
		}
		else
		{
			$data['success'] = false;
			$data['message'] = "This e-mail already used...";
		}
		echo json_encode($data);
	}

?>


Теперь сама проблема: после того, как от сервера приходит положительный ответы All right, после того изменяю е-mail делая его не корректным, промелькивает надпись "You should check e-mail and try again" (сработала проверка на то что e-mail не прошел проверку на регулярное выражение и снова надпись становится All right). Помогите разобраться. Спасибо большое.

e1f 15.01.2010 15:32

function checkMail() { 
    var mailValue = this.value;
    var mailExp = /^[a-zA-Z0-9_\.\-]+\@[a-zA-Z0-9\.\-]+\.[a-zA-Z0-9]{2,6}$/; 

    if ( mailExp.test(mailValue) ) { 
        //Обращаемся к серверу для проверки 

        jQuery.post('/checkReg.php',{e_mailEdit: $('#e_mailEdit').val()}, function(data) { 
            $('#checkMailDiv').html(data.message);
        },'json'); 

    } else { 
        //Ищем <div> в который будет выведен отрицательный ответ 
        $('#checkMailDiv').html("You should check e-mail and try again."); 
    } 
}

$(document).ready(function() { 
    $('#e_mailEdit').blur( checkMail );
});

igsavenko 16.01.2010 09:25

e1f, все работает отлично... огромное спасибо, а почему мой вариант не работал?

e1f 18.01.2010 12:45

Потому что на blur забиндин jquery-обработчик, и в инпуте функция checkMail на onblur. Поэтому у Вас даже при неправильном емейле все равно должен был отправляться запрос на сервер.

igsavenko 20.01.2010 21:24

Спасибо большое, за объяснение!


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