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

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

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

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

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

К делу.

 

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

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

Сашко
Я вставлю, тока частично
Ньярли
Что тут СКАЗАТЬ!? КОНФЕТКА!
#
Ньярли
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
спасибо надо попробовать прикрутить к своему сайту
Валерка
А что с лицензией на использование данной формы авторизации? Обычно в коде пишется, но тут ничего нет. :(

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

как выглядит какой тег
жирный текст <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>
разрешенные теги или посмотреть как будет выглядеть
counter strike mt2 silkroad pvp metin2 metin2 pvp knight pvp gm olarak başlayan pvpler pvp silkroad pvp serverler counter strike serverler msn show cam show görüntülü sohbet oyunlar suskunlar gazete oku