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. короче коментарии, пары слов достаточно, вы ведь не для идиотов пишете?

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

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

Похожие вопросы