Улучшение форм авторизации, регистрации и напоминации

Улучшение форм авторизации, регистрации и напоминации

Гутен морген таг, майне либе фройнде. Пока писал, доброе утро превратилось в добрый следующий день )

Сегодня мы займемся улучшением формы, которую я представил в этой статье.

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

К делу.

 

1. Доступность

Это был главный, на мой взгляд недостаток, который, в общем-то поправить было несложно. В чем суть: без js мы не могли увидеть другую форму, кроме той, которая показывается по умолчанию. Поэтому вместо "#" прописываем нормальные адреса страниц:

 

2. Код

Первое, что надо было поправить - ошибки оформить в массивы. Что и было сделано.

var er = [];
er[0] = "Неправильный формат email'a"; //0
er[1] = "Пароли не совпадают"; //0
er[2] = "Пользователь с таким email'ом уже зарегистрирован"; //0
er[3] = "Не угадали пароль. Или email. Попробуйте еще раз"; //1

Второе - сделать привязку событий на клики по псевдоссылкам более лаконичной. Для этого я убрал лишние классы из разметки и определял, что должно сработать ислодя из атрибута href ссылки:

$('.additional a').click(function(e) {
e.preventDefault();
var x;
switch ($(this).attr('href')) {
case ("signup.html"):
x = 0;
break;
case ("index.html"):
x = 1;
break;
case ("remind.html"):
x = 2;
break;
};
GoTo(x);
});

3. Фокусировка

Если бы мы попробовали в прошлом примере с помощью табуляции переходить по элементам формы, мы бы перескакивали с формы на форму, причем в некоторых браузерах маргин менялся бы автоматически, чтобы показать сфокусированные элементы формы и назад нам вернуться было бы проблематично.

Проблема решается простым указанием visibility: hidden для тех форм, которые сейчас не видны. На такие элементы формы фокус не переходит.

Таким образом при клике мы должны сделать блок, который сейчас приедет видимым:

$('.additional a').click(function(e) {
e.preventDefault();
var x;
switch ($(this).attr('href')) {
...
};
$(blocks[x]).css({ 'visibility': 'visible' }); //Эту строчку мы только что добавили
GoTo(x);
});

А уехавший блок надо скрыть:

var cur = 1;
function GoTo(num) {
margin = num * 382;
$('#wr').animate(
{ marginLeft: -margin }, 800, 'easeInOutBack', function() {
$(blocks[cur]).css({ 'visibility': 'hidden' });
cur = num;
});
}

Victor сделал разумное предложение: фокусировать на первом текстовом поле при переходе на другую форму. Предложение было весьма разумным. Реализуем.

function GoTo(num) {
margin = num * 382;
$('#wr').animate(
{ marginLeft: -margin }, 800, 'easeInOutBack', function() {
switch (num) {
case 0:
$('#email').focus();
break;
case 1:
$('#loginEmail').focus();
break;
case 2:
$('#remindEmail').focus();
break;
};
$(blocks[cur]).css({ 'visibility': 'hidden' });
cur = num;
});
}

4. Индикатор.

В форме не было индикатора загрузки. А без индикатора сейчас на приличные вечеринки уже не пускают. Генерируем его на аджакслоад.инфо и вставляем в уголочек.

Код увеличится на несколько функций: показ и скрытие индикатора, которые будут вызываться при вызове ajax-функций.

function ShowIndicator() {
$('#indicator').show();
}
function HideIndicator() {
$('#indicator').hide();
}

А в функцию авторизации вставляем в нужные места показ и скрытие индикатора:

function SignIn() {
pass = $('#loginPass').val();
email = $('#loginEmail').val();
ShowIndicator(); //показали
if ((email != "") && ( CheckPassword(email, pass))) {
//Sign User In
HideIndicator(); //скрыли
HideError();
} else {
ShowError(3);
HideIndicator();//скрыли, даже если залогинить не удалось
}
}

Смотрим Загружаем

Такие вот мелочи отличают плохое от хорошего. Спасибо всем читателям. Тем, кто критикует и тем кто благодарит.

Бис фрайтаг, майне либе.

PS. Кто-нибудь вставил в свой проект подобную форму?

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 60

Сашко
Я вставлю, тока частично
Ньярли
Что тут СКАЗАТЬ!? КОНФЕТКА!
#
Ньярли
Neutron
Очень хочу вживить в Wordpress... но не знаю как :(
Борода
Очень интересно. Главное в IE6 работает.
Правда нашел баг,не баг, не знаю. В FF3 перейдя по ссылке http://vremenno.net/examples/nice-forms-2/remind.html , кликнув на "Войти" всё исчезает. Это только у меня?
sanchosrancho
Хороший пример. Спасибо!

Правда, как и в предыдущий раз, у меня есть мааленькое «но»:

Когда мы переключаемся между формами, в нашей голове рождаются следующие вопросы:
- На какой форме мы находились?
– На какую форму мы перешли?
– Сколько еще там таких блоков спрятанно за границами?

То есть формы листаются конечно красиво, но при этом мы теряем ориентацию в этом пространстве. Мы теряемся, пытаясь понять, откуда вылезет форма (слева или справа).

Решить эту проблему можно двумя способами:
1) Оставлять надписи «Войти», «Вспомнить пароль», «Зарегистрироваться» всегда на виду.
2) Сократить количество форм до двух («Войти» и «Зарегистрироваться»), тогда каждая из них будет иметь свое законное место (либо слева, либо справа). Форма же «Вспомнить пароль» — это частный случай формы «Войти». Как ее упразднить наиболее красиво, я пока не придумал :) (но есть кое-какие мысли).

зы: на форме «войти» отсутствует валидация.
bugdenes
На самом деле такой авторизацией ВООБЩЕ не удивить если бы вы рассказали как сделать такую!!!
http://webo.in/my/
ДРУГОЕ ДЕЛО! к такому стремиться надо)
#
bugdenes
Grin
bugdenes, а что такого сложного в форме на Вебоине? Проявление-выезд элементов в jQuery делается довольно просто
Grundiss
2bugdenes, 2Grin:
Мало того что ничего выдающегося, так еще и явный косяк: переходя от "войти" к "забыли" мне в промежутке зачем-то показывается "регистрация"
2автор:
Да, неплохая форма получилась. Соглашусь с sanchosrancho: нопоминация это частный случай авторизации, их бы как-то объединить
#
Grundiss
I2Y
Спасибо, довольна интересная идея. Но действительно немножко путаешься с формами если много раз переходить с одной на другую.

P.S.
Отдельное спасибо за "Граватарки", впервые узнал об этом сервисе :)
#
I2Y
Женя
Борода, спасибо за замечание. Мой косяк.
Хотя, вообще говоря, его невозможно увидеть, так как невозможно попасть на страницу remind.html c включенным джаваскриптом. А без js ничего исчезнуть не может.
Женя
И спасибо всем, кто сказал спасибо )
sergy
Спасибо большое. А почему бы не сделать отправку данных не по onclick а по $().submit? Таким образом сразу начинает работать нажатие кнопки enter ) Да и с выключенным javascript данные будут отправляться.
Алексей
клаСНЕНЬКО спасибі вам велике!!!
николай
сделать бы эти формы в всплывающем окне JQUERY, чтобы сайт затемнялся, а в окне работать с формами... (возможно==TRUE) ? "Как?" : "Жаль";
#
николай
николай
Евгений, спасибо! попробую прикрутить к сайту
#
николай
marienplatz
для большей читабельности кода я бы использовал псевдо-ассоциативные массивы, что-то типа такого

var Message = new Object();

Message['not_login']='1234';
Message['success']='4321';
Message['question']='1432';
Message['error_on_ajax']='3214';

согласитесь, not_login или error_on_ajax более понятно
Smile42RU
привет. если не в лом поясните почему форма не пашет в 7-ом ослике?
и если можно, помогите вылечить сей косяк.
Evgenij
Смайл, я проверял форму в ИЕ7. И перепроверил. Должна работать.
Smile42RU
блин, ну ладно, буду разбираться... потом напишу в чем была проблема.
Smile42RU
разобрался, косяк был в моем коде, сама форма пашет отлично... Жека - респект тебе!)
Коля
Подскажите как поставить форму на сайт
#
Коля  
Evgenij
Коля, просто копируете код из примера. И вставляете на сайт.
Коля
Evgenij спасибо
#
Коля
Glam
Хорошая статья, проделано не мало работы. Вот еще бы скрипты приложить к этому всему - цены бы не было ;)
#
Glam
gps
Спасибо отличная авторизация, а я искал мучился )))))
#
gps  
zurito
Как говорится, спасибо за форму, однако, в 7 ИЕ не хочет ругаться если пустые поля в форме SignIn, пишет ошибка на странице.
Исправил в функции SignIn() email на e_mail - заработало, хрен знает че такое.
Кста, лейблы с формы SignUp не переименованы в других, но это так, мелочи.
#
zurito
cord
Спасибо огромное! Долго искал, прикручу к сайту обязательно!
#
cord
Oleg
Спасибо огромное, особенно полезным оказался индикатор загрузки.
#
Oleg
Анатолий
Женя, каким образом лучше дождаться ответа от сервера при проверке существования email или правильности введенного пароля?
К примеру, функция
function CheckPassword(email, pass) {
//check if email and pass match
........
return result;
}
не успевает дождаться ответа от сервера возвращает в основной алгоритм значение по умолчанию.
Заранее благодарен за ответ!
#
Анатолий
alex
2 Евгений, 3й вариант хорош, только, к сожалению, нет кнопки отмены (убрать окно).
#
alex
Osadach
Здравствуйту. Вставил себе на сайт все работает только не регистрирует. В чем может быть дело. Я только осваиваю html CSS Php.Может кто подскажет причину
P.S www.aqueduct-v-v.ru
#
Osadach
German
Osadach, мама моя... Так надо же PHP скрипт, которому будут посылаться данные из формы, а так же база данных, к которой будет обращаться PHP скрипт!

#
German
German
2 alex, то что нету кнопки убрать окно, этот пипец как плохо!
Это даже хуже того, о чем я сейчас напишу!

Нужно зайти на jquery.com и познакомиться с аттрибутами.. Точнее с возможностью назначения атрибутов!

Смотрите!

Это кнопка, при нажатии на нее вызывается функция ShowForm!

Теперь смотрим саму функцию!

function ShowForm() {
$('#button').hide();
$('#blocker').show();
$('#vrWrapper').slideDown(700);
}

А что она делает?

Скрывает элемент с ИД #button - это и есть кнопка...
Показывает блок #blocker
И $('#vrWrapper').slideDown(700);

Почитайте о slideDown на jquery.com
#
German
Osadach
German про php скрипт и про базу я знаю, только написать не могу. Никак не пойму это php.)))))
#
Osadach
Геннадий
Хотим заказать дизайн для сайта агентства недвижимости.Есть структура,ТЗ и понимание.Мнения-на почту.
#
Геннадий
Sergey Shimkiv
Все получилось, спасибо за формочку ;)
#
Sergey Shimkiv
Роман
Доброго времени суток!
Хотел бы узнать, как вставить эту форму на свой сайт?? Дело понятное, что html-код из примера необходимо вставить на свой сайт. Но необходимо ли еще что-нибудь для этого? Имею ввиду, где будет храниться информ-ия о пользователях? Как я смогу ее увидеть? Нужно ли еще что-нибудь сделать для этого?? Форма, кстати, лучшая из тех, что я видел)
Sergey Shimkiv
2 Роман:
Как минимум понадобится пример+php+mysql(минимум 1 таблица в некоторой БД). Дальше как вариант - расширять javascript код примера аяксовыми запросами, которые отправлять в созданные php-сценарии, которые в свою очередь обращаются к таблице БД с пользователями.
#
Sergey Shimkiv
German
Роман, посмотрите 2 видео на этой странице! Думаю кое что станет понятно... После чего идите на сайт denwer.ru Скачивайте денвер и устанавливайте!
#
German  
Виктор
Евгений, хелп!
Посмотрел Вашу работу, понравилась, вставил к себе на сайт. А какие скрипты прописывать и как подключить базу данных не знаю. Помоги пожалуйста.
#
Виктор
Evgenij
Виктор, мы здесь освещаем только клиентскую часть вопроса.
Ваш вопрос слишком объемен, чтобы на него можно было ответить в комментарии.
Arius
А разве HTML и базы совместимы?
Всегда видел PHP+базы, а тут те на...
#
Arius
German
Arius, HTML - это язык гипертекстовой разметки! При помощи HTML разметки, то есть тегов вы создаете структуру страницы!

PHP - язык исполняемый на стороне веб-сервера!

PHP может общаться с базой данных и выдавать результат общения в виде HTML...
#
German  
Novi4Ok
Люди знающие, помогите :)
Я вот скачал форму, и не знаю как её установить на сайт, т.е. я её установил на сайт, но когда "Зарегистрироваться" нажимаю, ничего не происходит. Пожалуйста подскажите как и куда в пихнуть нужные ссылки, или чего там?
Заранее большое спасибо!
Shiza
Спасибо!
#
Shiza
kysi-ke
спасибо огромное! очень долго искала что то подобное. прямо таки приклоняюсь)осталось разобраться с тем как и что делать для того чтобы регистрация проходила)
#
kysi-ke
Евгений
Спасибо за авторизацию, но при вставке на сайт, при выборе регистрации или возобновления пароля - авторизацию съезжает в право. Помогите пожалуйста
#
Евгений
Evgenij
Евгений, дайте ссылку, иначе сложно помочь )
Дмитрий
В IE8 не палит валидация... работает только на форме Вспомнить пароль.. а на регистрации и на входе не работает, в мазиле все норм.. Кто нибудь сталкивался с такой проблеммой?
#
Дмитрий
krasun
Grundiss: "Соглашусь с sanchosrancho: нопоминация это частный случай авторизации, их бы как-то объединить"

Предложите лучше, как, чем просто говорить. А форма входа - это частный случай регистрации? Может вообще без форм?
graf
Формочка красивая конечно, особенно для меня - человека очень далекого от js и css. Но пока прикручивал форму и тестировал, обнаружил бак такой: если сразу перейти на страничку signup.html (минуя всякие index.html) и сразу нажать на вход на ней, то как и положено вылетает окошка входа, но потом сразу же пропадает. Если с начальной signup.html нажать забыл пароль, а потом вход, то вход не пропадает. Помогите это исправить, а то я не понимаю до конца как тут работает все.

Второй косяк: с выключенным js по прежнему не попасть на сайт, т.к. функции onclick не сработают.

Если второй недочет скорее уже идейный, то первый как то надо исправить.
#
graf
Илья
напишите код базы данных php для записи зарегестрированых пользователей
#
Илья
Михаил
Подскажите как можно исправить такой баг, если на форме в поле input нажать и удерживая кнопку мыши сдвинуть её вправо, форма уедет влево и исчезнет. Как это устранить?
#
Михаил
Evgenij
Михаил, я не смог повторить то о чем вы сказали.
Михаил
Действительно в IE и Mozilla этого не происходит, но в Google chrome и Safari это есть,
вот ссылка на видео:
http://narod.ru/disk/27013580001/Form.swf.html
#
Михаил
alexandr
спасибо надо попробовать прикрутить к своему сайту
Валерка
А что с лицензией на использование данной формы авторизации? Обычно в коде пишется, но тут ничего нет. :(
Антон
(Подскажите как можно исправить такой баг, если на форме в поле input нажать и удерживая кнопку мыши сдвинуть её вправо, форма уедет влево и исчезнет. Как это устранить?) такой баг проверил! существует!
И ещё в форме войти нет проверки email на корректность, работает только на пустое поле!

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler