Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.01.2010, 00:40
Аспирант
Отправить личное сообщение для igsavenko Посмотреть профиль Найти все сообщения от igsavenko
 
Регистрация: 15.01.2010
Сообщений: 83

Помогите новичку!
Здравствуйте Все! Начал изучать 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). Помогите разобраться. Спасибо большое.
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2010, 14:32
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

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 );
});
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2010, 08:25
Аспирант
Отправить личное сообщение для igsavenko Посмотреть профиль Найти все сообщения от igsavenko
 
Регистрация: 15.01.2010
Сообщений: 83

e1f, все работает отлично... огромное спасибо, а почему мой вариант не работал?
Ответить с цитированием
  #4 (permalink)  
Старый 18.01.2010, 11:45
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Потому что на blur забиндин jquery-обработчик, и в инпуте функция checkMail на onblur. Поэтому у Вас даже при неправильном емейле все равно должен был отправляться запрос на сервер.
Ответить с цитированием
  #5 (permalink)  
Старый 20.01.2010, 20:24
Аспирант
Отправить личное сообщение для igsavenko Посмотреть профиль Найти все сообщения от igsavenko
 
Регистрация: 15.01.2010
Сообщений: 83

Спасибо большое, за объяснение!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ССЫЛКИ (Помогите новичку) meggen (X)HTML/CSS 8 30.11.2009 09:51
Замена текста в блоках по клику, помогите новичку) langolier Я не знаю javascript 1 27.05.2009 03:13
Помогите новичку OlexandrI Общие вопросы Javascript 6 07.12.2008 09:17
Помогите новичку sdff Общие вопросы Javascript 2 15.09.2008 16:51
Помогите новичку - onChange() не срабатывает serp Общие вопросы Javascript 2 01.08.2008 13:47