Pull to refresh

Красивые подсказки для jQuery Validation с помощью qtip

Reading time4 min
Views20K
Привет Хабр!
Хочу поделиться способом организации красивых подсказок для плагина валидации на jQuery. Для этих целей будем использовать еще один плагин создания красивых информационных сообщений — qtip.



Для работы нам понадобиться:
форма на которой будем настраивать валидацию

<form action="" method="post" id="register_form" name="form_reg">
	Логин: <input title="" name="users_login" type="text"  /><br>
	Пароль: <input name="users_password" type="password"/></br>
	<input name="submit_f" id="subm_id" type="button" value="Зарегистрироваться"/>
</form>

Сам jQuery
Плагины:
qtip
Validation

Теперь соберем все в одном месте(рекумендую вынести валидацию и подсказки в отдельный файлы, а в основном их подключать)

<script type="text/javascript" src="js/jquery-1.7.1.js"></script>
<script type="text/javascript" src="js/validation190/jquery.validate.js"></script>
<script type="text/javascript" src="js/qtip/jquery.qtip.js"></script>
<link rel="stylesheet" type="text/css" href="css/jquery.qtip.css"/>

<!--стиль для ошибок-->
<style>
	input.error,
	textarea.error,
	select.error,
	div.error
	{
		border:1px solid red !important;
	}

	input[type='text'].error {border:1px solid #e1e1e1; border-top:1px solid #b0aa9b; border-left:1px solid #b0aa9b; background:#ff9582;}
</style>

<script type="text/javascript" language="javascript">
	$(document).ready(function() {

              //настрйока валидации
	$("#register_form").validate({
		ignore: ".ignore, :hidden",
		focusInvalid: true,
		hideErrElem : "#validate_error",
		errorPlacement: function(error,element) {
			//назначаем обработчик на ошибки
			changeTip(element);
			return true;
		},

		rules: {
			'users_login'		: {
				required : true,
				login: true
			},
			'users_password'		: {
				required : true,
				pass: true,
				minlength: 6
			}
		}
	});
	$("#subm_id").click(function() {
		var valid = $("#register_form").valid();
		if(valid)
		{
			document.forms["form_reg"].submit()
	    }
	});

	jQuery.validator.addMethod('login', function(value, element, param)
	{
		if((new RegExp("^[0-9a-zA-Z\_]{3,}$", "").test(value)))
		{
			return true;
		}

		return false;
	});

	jQuery.validator.addMethod("pass", function(value, element)
	{
		if((/^[a-zA-Z\d\-\!\.\/\$\\\,\?\:\&\*\;\@\%\(\)\+\=\№\#\_\[\]]{6,}$/.test(value)))
		{
			return true;
		}

		return false;
	});

	//для того чтобы выводить ошибки при валидации обернем все подсказки в объект, чтобы было удобнее ими управлять
	fields_tip = {
		//основные параметры для подсказок
		tip_w : 300,
		tip_r : 3,
		tip_color : 'light',
		tip_show : 'mouseover focus',
		tip_show_ready : false,
		tip_hide : 'mouseout click blur',
		tip_border_w : 0,
		tip_screen : false,
		tip_hide_delay : 0,

		//настройка внешнего вида подсказок qtip

		//поле логин
		users_login : function() {
			$('*[name="users_login"]').qtip({
				content: {
					text: 'Для поля "Логин" допускается ввод чисел от 0 до 9, а также букв латинского алфавита и символа "_"',
					title: {
						text: 'Логин'
					}
				},
				position: {
					corner: {
						target: 'rightMiddle',
						tooltip: 'leftMiddle'
					},
					adjust: {
						screen: this.tip_screen
					}
				},
				show: {
					when: this.tip_show,
					solo: false,
					ready : this.tip_show_ready
				},
				hide: {
					when: {
						event: this.tip_hide
					},
					delay: this.tip_hide_delay
				},
				style: {
					tip: true,
					border: {
						width: this.tip_border_w,
						radius: this.tip_r
					},
					name: this.tip_color,
					width: this.tip_w
				}
			});
		},
		users_login_destruct : function() {
			$('*[name="users_login"]').qtip('destroy');
		},
		//поле пароль
		users_password : function() {
			$('*[name="users_password"]').qtip({
				content: {
					text: 'Для поля "Пароль" допускается ввод чисел от 0 до 9, а также букв латинского алфавита и символов "-!./\$,?:&*;@%()+=№#_[]"',
					title: {
						text: 'Пароль'
					}
				},
				position: {
					corner: {
						target: 'rightMiddle',
						tooltip: 'leftMiddle'
					},
					adjust: {
						screen: this.tip_screen
					}
				},
				show: {
					when: this.tip_show,
					solo: false,
					ready : this.tip_show_ready
				},
				hide: {
					when: {
						event: this.tip_hide
					},
					delay: this.tip_hide_delay
				},
				style: {
					tip: true,
					border: {
						width: this.tip_border_w,
						radius: this.tip_r
					},
					name: this.tip_color,
					width: this.tip_w
				}
			});
		},
		users_password_destruct : function() {
			$('*[name="users_password"]').qtip('destroy');
		},
		//инициализация подсказок
		init : function() {
			this.users_login();
			$('*[name="users_login"]').mouseover();
			this.users_password();
			$('*[name="users_password"]').mouseover();
		},

		destructor : function() {
			this.users_login_destruct();
			this.users_password_destruct();
		}

	};

	fields_tip.init();
});

function changeTip(element)
{

	if(!($(element).hasClass('error')))
	{
		//если класса ошибки у элемента нет, то делаем ему нормальную подсказку
		//удаляем ту, что есть
		$(element).qtip('destroy');
		//создаем обычную
		fields_tip.tip_r = 3;
		fields_tip.tip_border_w = 3;
		fields_tip.tip_show_ready = false;
		fields_tip.tip_color = 'light';
		fields_tip.tip_show = 'mouseover focus';
		fields_tip.tip_hide = 'mouseout click blur';
		fields_tip[$(element)[0].name].call(fields_tip);
		$('*[name="' + $(element)[0].name + '"]').mouseover();
	}
	else
	{
		//удаляем ту, что есть
		$(element).qtip('destroy');

		fields_tip.tip_color = 'red';
		fields_tip.tip_show_ready = true;
		fields_tip.tip_show = 'mouseover focus';
		fields_tip.tip_hide = 'click mouseout blur';

		//создаем ошибку
		fields_tip[$(element)[0].name].call(fields_tip);
		$('*[name="' + $(element)[0].name + '"]').mouseover();
                            //скрытие подсказки, можно сделать любой эффект
		setTimeout('$(\'*[name="' + $(element)[0].name + '"]\').qtip("hide");', 3000);
	}
}

</script>


<form action="" method="post" id="register_form" name="form_reg">
	Логин: <input title="" name="users_login" type="text"  /><br>
	Пароль: <input name="users_password" type="password"/></br>
	<input name="submit_f" id="subm_id" type="button" value="Зарегистрироваться"/>
</form>

Благодарю за внимание.
Надеюсь, информация будет полезна
PS приветствуются указания на ошибки, буду стараться все исправлять
Tags:
Hubs:
-12
Comments5

Articles