Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.05.2013, 11:58
203 203 вне форума
Новичок на форуме
Отправить личное сообщение для 203 Посмотреть профиль Найти все сообщения от 203
 
Регистрация: 21.04.2013
Сообщений: 9

Валидация Пароля и Email
Здравствуйте. Не получается написать работающую проверку пароля и email. Задача состоит в том, когда заполнил форму, я нажимаю кнопку submit (мне выдаёт ошибки если есть, если нет то переход на другую страницу). Помогите пожалуйста заранее спасибо.
Вот то что получилось написать.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Регистрация</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-2.0.0.min.js"></script>
    <script type="text/javascript">
    function checkPasswords()
{
    var passl = document.getElementByid("passwordl");
    var pass2 = document.getElementByid("password2");
    if(passl.value!=pass2.value)
        passl.setCustomValidity("Пароли  не совпадают. Пожалуйста, проверьте  идентичность паролей в обоих полях!");
    else
        passl.setCustomValidity("");
}
    function checkmail(value) {
 
     reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
     if (!value.match(reg)) {alert("Пожалуйста, введите свой настоящий e-mail"); 
     document.getElementById('email').value=""; return false; }
    }
 
    </script>
</head>
<body>
<div id="content">
    <form action="3.html" id="jform" method="post">
        <fieldset>
            <legend>Регистрация</legend>
            <p>
                <label for="firsname" class="block">Имя:</label>
                <input type="text" name="firsname" id="firsname" />
            </p>
            <p>
                <label for="lastname" class="block">Фамилия:</label>
                <input type="text" name="lastname" id="lastname" />
            </p>
            <p>
                <label for="passwordl" class="block">Пароль:</label>
                <input type="Password" id="passwordl" onchange="checkPasswords()"/>
            </p>
            <p>
                <label for="password2" class="block">Повторение пароля:</label>
                <input type="Password" name="Password2" id="password2" onchange="checkPasswords()"/>
            </p>
            <p>
                <label for="birthday" class="block">Дата рождения<small>(дд-мм-гггг)</small>:</label>
                <input type="text" name="birthday" id="birthday" />
            </p>
            <p>
                <label for="email" class="block">Email     <small>Например(Ivanov@gmail.com)</small>:</label>
                <input type="text" name="email" id="email"/>
            </p>
            <p>
                <label for="email" class="block">Ваш пол:</label>
                <label for="Men" class="block">Мужчина</label>
                <input type="radio" name="se" id="Men" value="Male"/>
                <label for="woman" class="block">Женщина</label>
                <input type="radio" name="se" id="woman" value="Female"/>
            </p>
        <p>
                <label for="email" class="block">Хобби</label>
        </p>
            <select>
             <optgroup Label ="General hooby">
             <option value="playing">Playing</option>
             <option value="music">Music </option>
            </optgroup>
            <optgroup Label ="Educational hobby">
            <option value="stamp collection">Stamp Collection</option>
            <option value="reading">Reading</option>
            </optgroup>
            </select>
        </fieldset>
        <p>
        <form action="#" method=post onSubmit="return checkmail(this.email.value)">
            <button type="submit" id="send">Подтвердить</button>
        </form>
        </p>
        <p>
            <button type="reset" id="send">Очистить</button>
        </p>
    </form>
</div>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2013, 20:46
Аспирант
Отправить личное сообщение для elnoro Посмотреть профиль Найти все сообщения от elnoro
 
Регистрация: 23.06.2011
Сообщений: 39

Я упростил код, чтобы решение стало очевидно:
<form action="">
    <p>Пароль:<input type="password" name="password1" id="password1" /></p>
    <p>Повторите пароль:<input type="password" name="password2" id="password2" /></p>
    <p>Email: <input type="text" name="email" id="email" /></p>
    <p><input type="submit" id="submit_button" onclick="return validateForm()"/></p>
</form>

function validateForm () {
    // проверяем пароли
    // выбираем элементы
    var password1 = document.getElementById('password1');
    var password2 = document.getElementById('password2');
    // сравниваем написанное, если не равно, то:
    if (password1.value !== password2.value) {
        // сообщаем пользователю, можно сделать как угодно
        alert('Проверьте пароли!');
        // сообщаем браузеру, что не надо обрабатывать нажатие кнопки
        // как обычно, т. е. не надо отправлять форму
        return false; 
    }
    // проверяем email
    var email = document.getElementById('email');
    // регулярка для проверки, не знаю, работает ли приведенный в примере
    var email_regexp = /[0-9a-zа-я_A-ZА-Я]+@[0-9a-zа-я_A-ZА-Я^.]+\.[a-zа-яА-ЯA-Z]{2,4}/i;
    // проверяем значение поля email, если нет, то: 
    if (!email_regexp.test(email.value)) {
        alert('Проверьте email');
        return false;
    }
}


Подробнее про return false . Здесь хочу отметить, что в случае ошибки функция возвращает ложь, а строчка в onclick кнопки возвращает значение функции всегда, т. е. при ошибке в onclick возвращается false.

Я также не был уверен в правильности регулярного выражения, приведенного выше, потому взял простейшее для проверки email. Про них можно прочитать на сайте.

Первая и главная ошибка, которая бросилась в глаза - неправильная верстка формы, т. е. 2 тега form. Кнопка submit должна находится в той же форме, которую отправляет. Подробнее тут.

Пример тут.
Ответить с цитированием
  #3 (permalink)  
Старый 26.05.2013, 00:37
203 203 вне форума
Новичок на форуме
Отправить личное сообщение для 203 Посмотреть профиль Найти все сообщения от 203
 
Регистрация: 21.04.2013
Сообщений: 9

Спасибо разобрался все работает. Не подскажите как передать поля с именем и фамилией на другую страницу.
Пример: когда я нажимаю кнопку подтвердить то выполняется переход на другую страницу и выводит фамилию и имя которое я ввёл.

Последний раз редактировалось 203, 26.05.2013 в 01:07.
Ответить с цитированием
  #4 (permalink)  
Старый 26.05.2013, 10:54
Аспирант
Отправить личное сообщение для elnoro Посмотреть профиль Найти все сообщения от elnoro
 
Регистрация: 23.06.2011
Сообщений: 39

В начале формы пишешь:
<form action="test.php" method="get">
вместо
<form action="">

И добавляешь 2 input'а с type="text" и name="firstname" и name="lastname"
Создаешь в той же папке test.php следующего содержания:
<?php 
    echo "Имя " . $_GET[firstname] . " Фамилия " . $_GET[lastname];
?>

Для этого должен быть настроен php, это в гугл .

Кстати, можно по-другому, без php:
<!DOCTYPE HTML>
<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8">
		<title>Test</title>
	</head>
	<body>
		<form action="test2.html" method="get">
			Email:<input type="text" name="email" value="test_email"/>
			Phone:<input type="text" name="phone" value="121222"/>
			<input type="submit" />
		</form>
	</body>
</html>


Файл test2.html:
<script type="text/javascript" charset="utf-8">
	var resultats = location.search.slice(1).split('&').map(function (e) { return e.split('=')[1] });
	document.writeln('Email:' + resultats[0]);
	document.writeln('Phone:' + resultats[1]);
</script>


В строке с resultats, по порядку:
1. location.search - берем строку вида ('?emai=te&phone=1').
2. slice(1) - убираем знак вопроса
3. split('&') - разделяем строку на массив строк по '&'
4. map(function (e) {}) - проходим по массиву и каждый элемент еще раз разбиваем по '=' и возвращаем второй элемент.

Последний раз редактировалось elnoro, 26.05.2013 в 11:10. Причина: придумалось кое-что
Ответить с цитированием
  #5 (permalink)  
Старый 26.05.2013, 15:44
203 203 вне форума
Новичок на форуме
Отправить личное сообщение для 203 Посмотреть профиль Найти все сообщения от 203
 
Регистрация: 21.04.2013
Сообщений: 9

Спасибо большое за помощь, очень помогли.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
валидация email zlodiak Библиотеки/Тулкиты/Фреймворки 2 27.02.2013 15:55
Отправка формы на Email Donny Работа 4 26.07.2011 09:04
Валидация полей, ошибка FOJIK ExtJS 1 22.03.2011 20:53
Сохранение таблицы с сайта и отправка на email martinss Events/DOM/Window 5 29.12.2010 12:39
Валидация полей - сравнение полей пароль olva Элементы интерфейса 7 01.02.2010 20:54