Dark_Knight
@Dark_Knight
Game Dev

JQuery. Как улучшить регистрационную форму?

Здравствуйте.

Подскажите пожалуйста.

Я написао форму проверку формы регистрации, вот код:

$(this).blur(function () {<br>
       var _value = $(this).val(),<br>
           reg_loginName = new RegExp(/^[a-zA-Z0-9_-]{3,16}$/).test(_value); // в данном случае выражения для проверки логина, но на форме так же есть почта, пароль, имя , фамиля, то есть для каждого поля своя переменная<br>
            .........<br>
       switch($(this).attr("id"))<br>
       {<br>
           case "id_username": // проверка для логина, но так же будет отдельный case для каждого поля(почта, пароль, имя, фамилия...)<br>
               if((!reg_loginName) || (_value.length < 6)) // если не соответствует выражению и пользователь ввел меньше 6 символов, то красим рамку в красный цвет<br>
               {<br>
                   $(this).parent().parent().attr("class", "control-group error");<br>
<br>
                   if(!(reg_loginName) && !($(".help-login-reg").length)) // если не соотсветсвует выражению, то выводим сообщение об ошибки, предворительно проверив, что данное сообщение еще не создано, чтоб не создавать одинаковых сообщений<br>
                       $(this).parent().children(".error-list").append("<li class='help-inline help-login-reg'>Только символы латинского алфавита, цифры, дефис и подчеркивание (a–z, 0-9, -, _).</li>");<br>
                   if((_value.length < 6) && !($(".help-login-length").length)) // если меньше 6 символо, то выводим сообщение об ошибке<br>
                       $(this).parent().children(".error-list").append("<li class='help-inline help-login-length'>В логине должно быть не менее 6 символов.</li>");<br>
               }<br>
               if((reg_loginName) && (_value.length >= 6)) // если пользователь верно заполнил форму, то красим рамку в зеленый цвет<br>
               {<br>
                   $(this).parent().parent().removeAttr("class");<br>
                   $(this).parent().parent().attr("class", "control-group success");<br>
               }<br>
               if(reg_loginName) // удаляем сообщение об ошибках, если они выводились<br>
                   $(this).next().children(".help-login-reg").remove();<br>
               if(_value.length >= 6) // удаляем сообщение об ошибках, если они выводились<br>
                   $(this).next().children(".help-login-length").remove();<br>
           break;<br>
       }<br>
   });<br>
<br>


Теперь вопрос: как улучшить данный скрипт, как можно написать его в виде классов в JQuery(знаю классов нет в этой библиотеки, но как тогда их можно имитировать)? Как вообще нужно писать подобные вещи на jQuery, чтоб они не просто работали, а люди, которые читали код, понимали, что пишет не новичек? подскажите пожалуйста!

p.s. задача в том, что нужно сделать подобные вещи именно с помоцью библиотеки jquery, никаие другие и без «чистого» javascript

Спасибо за помощь и время!
  • Вопрос задан
  • 2990 просмотров
Решения вопроса 1
wrmax
@wrmax
Старайтесь стремится к тому, чтобы код можно было прочитать без комментариев.
Обычно левую фигурну скобку не пишут с новой строки

Ниже улучшенный вариант кода для дальнейшего развития
$(this).blur(function () {
	var removeErrorMessage = function(className) { $(this).next().children("." + className).remove(); };
	var showErrorMessage = function(className, message ){
		if (!($("." + className).length)){
			$(this).parent().children(".error-list").append(["<li class='", className, "'>", message, "</li>"].join());
		}
	};
	var showSuccessView = function() { $(this).parent().parent().attr("class", "control-group success"); };
	var showWrongView = function() { $(this).parent().parent().attr("class", "control-group error"); };
	
	var checkLogin = function(login){
		var loginVerified = new RegExp(/^[a-zA-Z0-9_-]{3,16}$/).test(login);	
		
		if ((loginVerified) && (login.length >= 6)) showSuccessView(); else showWrongView();
		
		if (login.length >= 6) removeErrorMessage("help-login-length");
		else{ 
			showErrorMessage("help-inline help-login-length", "В логине должно быть не менее 6 символов");
		}
		
		if (loginVerified) removeErrorMessage("help-login-reg");
		else{
			showErrorMessage("help-inline help-login-reg", "Только символы латинского алфавита, цифры, дефис и подчеркивание (a–z, 0-9, -, _).");
		}
		
	};
	
	switch($(this).attr("id")){
		case "id_username": checkLogin($(this).val()); break;
	}
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
BlessMaster
@BlessMaster
как улучшить данный скрипт, как можно написать его в виде классов в JQuery (знаю классов нет в этой библиотеки, но как тогда их можно имитировать)?

Что Вы имеете в виду под «имитировать»? В jQuery пишут плагины — материалов на эту тему на хабре хватает — смотрите по тегу jquery plugins — авторы выкладывают исходные коды на github

Как вообще нужно писать подобные вещи на jQuery, чтоб они не просто работали, а люди, которые читали код, понимали, что пишет не новичек? подскажите пожалуйста!

Ну, как выше сказали, дело не в jQuery, это общий момент для любых фреймворков и языков:
— пишите кратко и лаконично,
— придерживайтесь принципа «разделяй и властвуй» — выносите общий код «за скобки» — в отдельные методы
— поменьше магии — всё должно быть очевидно и наглядно
— не старайтесь использовать максимум возможностей вроде анимаций и т.п. — код должен выполнять работу, а не нагружать процессор — у кого-то и батарейка нерезиновая.
Остальное — придёт с опытом
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Во первых, если у вас есть возможность подправить разметку формы — можно использовать всякие штуки аля… type=«email», атрибут required, атрибут pattern и много чего еще из HTML 5. В JS же сделать проверку только по этим аттрибутам.

Во вторых, зачем вам здесь классы? Вообще прототипное наследование иногда гараздо круче классического. Это вам вообще JavaScript учить надо а не jQuery.

Вообще брали бы готовые плагины для jQuery и не парились.
Ответ написан
taliban
@taliban
php программист
«Как вообще нужно писать подобные вещи на jQuery, чтоб они не просто работали, а люди, которые читали код, понимали, что пишет не новичек?»
Опыт нужен а не подсказка. То что там написано любой итак поймет, а чтоб понимали что пишет не новичек, нужно долгое время работать с JS (jQuery конкретно тут ни при чем)

1. $(this).parent().parent() повторяется много раз, не проще ли вынести его один раз в переменную?
2. .append("<li class='help-inline help-login-reg'>Только символы латинского алфавита, цифры, дефис и подчеркивание (a–z, 0-9, -, _).</li>"); — вот такое я тоже не очень люблю, вынесите показ ошибок отдельно error.show('message')
3. см 1. var self = $(this);
4. короче коментарии, пары слов достаточно, вы ведь не для идиотов пишете?

Этого в принципе будет достаточно чтоб сделать ваш скрипт чуть лучше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 17:06
15000 руб./за проект
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект