Главная > JavaScript, jQuery > Пишем диалоговые окна при помощи jQuery

Пишем диалоговые окна при помощи jQuery

Довольно таки часто приходится использовать в своих проектах такую вещь, как диалоговые окна. Стандартные диалоговые окна, мягко говоря, не блещут своей красотой, поэтому приходиться использовать различные JavaScript фрэймворки, например YUI или jQuery. Сегодня я хочу рассказать, как сделать это при помощи jQuery.

Рассмотрим следующие окна: информационное сообщение, форма для регистрации, подтверждение действия. Для начала нам надо подключить файлы jQuery и стили CSS:

<!-- Подключение файлов jQuery -->
 
<script src="dev/jquery-1.3.2.js" type="text/javascript"></script>
<script src="dev/ui/ui.core.js" type="text/javascript"></script>
<script src="dev/ui/ui.draggable.js" type="text/javascript"></script>
<script src="dev/ui/ui.resizable.js" type="text/javascript"></script>
<script src="dev/ui/ui.dialog.js" type="text/javascript"></script>
<script src="dev/ui/effects.core.js" type="text/javascript"></script>
<script src="dev/ui/effects.highlight.js" type="text/javascript"></script>
<script src="dev/external/bgiframe/jquery.bgiframe.js" type="text/javascript"></script>
<!-- /Подключение файлов jQuery -->

Затем опишем функции для работы диалоговых окон, при помощи jQuery. Скрипт для формы регистрации:

<script type="text/javascript">
	// Пример с формой регистрации -- [начало]
	$(function() {
 
		var name = $("#name"),
			email = $("#email"),
			password = $("#password"),
			allFields = $([]).add(name).add(email).add(password),
			tips = $("#validateTips");
 
		function updateTips(t) {
			tips.text(t).effect("highlight",{},1500);
		}
 
		function checkLength(o,n,min,max) {
 
			if ( o.val().length > max || o.val().length < min ) {
				o.addClass('ui-state-error');
				updateTips("Length of " + n + " must be between "+min+" and "+max+".");
				return false;
			} else {
				return true;
			}
 
		}
 
		function checkRegexp(o,regexp,n) {
 
			if ( !( regexp.test( o.val() ) ) ) {
				o.addClass('ui-state-error');
				updateTips(n);
				return false;
			} else {
				return true;
			}
 
		}
 
		$("#formDialog").dialog({
			bgiframe: true,
			autoOpen: false,
			height: 300,
			modal: true,
			buttons: {
				'Создать пользователя': function() {
					var bValid = true;
					allFields.removeClass('ui-state-error');
 
					bValid = bValid && checkLength(name,"username",3,16);
					bValid = bValid && checkLength(email,"email",6,80);
					bValid = bValid && checkLength(password,"password",5,16);
 
					bValid = bValid && checkRegexp(name,/^[a-z]([0-9a-z_])+$/i,"Имя пользователя может содержать только символы [a-z, 0-9, _] и начинаться с буквы.");
					// From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
					bValid = bValid && checkRegexp(email,/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,"Некорректный формат e-mail. Для примера pupkin2@yandex.ru");
					bValid = bValid && checkRegexp(password,/^([0-9a-zA-Z])+$/,"В пароле разрешенны только символы [a-z,0-9]");
 
					if (bValid) {
						$('#users tbody').append('<tr>' +
							'<td>' + name.val() + '</td>' + 
							'<td>' + email.val() + '</td>' + 
							'<td>' + password.val() + '</td>' +
							'</tr>'); 
						$(this).dialog('close');
					}
				},
				'Отмена' : function() {
					$(this).dialog('close');
				}
			},
			close: function() {
				allFields.val('').removeClass('ui-state-error');
			}
		});
 
 
		$('#create-user').click(function() {
			$('#formDialog').dialog('open');
		})
		.hover(
			function(){ 
				$(this).addClass("ui-state-hover"); 
			},
			function(){ 
				$(this).removeClass("ui-state-hover"); 
			}
		).mousedown(function(){
			$(this).addClass("ui-state-active"); 
		})
		.mouseup(function(){
				$(this).removeClass("ui-state-active");
		});
 
	});
	// Пример с формой регистрации -- [Конец]
</script>

Скрипт для диалога подтверждения (Confirm):

<script type="text/javascript">
	// Пример с диалогом подвтерждения -- [Начало]
	$(function() {
		$("#confirmDialog").dialog({
			bgiframe: true,
			resizable: false,
			height:140,
			modal: true,
			autoOpen: false,
			overlay: {
				backgroundColor: '#000',
				opacity: 0.5
			},
			buttons: {
				'Удалить все': function() {
					$(this).dialog('close');
				},
				'Отмена': function() {
					$(this).dialog('close');
				}
			}
		});
	});
	// Пример с диалогом подвтерждения -- [Конец]
</script>

Скрипт для информационного сообщения:

<script type="text/javascript">
	// Пример с информационным сообщением -- [Начало]
	$(function() {
		$("#messageDialog").dialog({
			bgiframe: true,
			modal: true,
			autoOpen: false,
			buttons: {
				Ok: function() {
					$(this).dialog('close');
				}
			}
		});
	});
	// Пример с информационным сообщением -- [Конец]
</script>

Далее опишем HTML - код самих диалоговых окон. Для скрипта регистрации:

<div id="formDialog" title="Регистрация">
 
Все поля обязательны для заполнения.
<form>
	<fieldset>
		<label for="name">Имя</label>
		<input id="name" class="text ui-widget-content ui-corner-all" name="name" type="text" />
		<label for="email">E-mail</label>
		<input id="email" class="text ui-widget-content ui-corner-all" name="email" type="text" />
		<label for="password">Пароль</label>
		<input id="password" class="text ui-widget-content ui-corner-all" name="password" type="password" />
	</fieldset>
	</form></div>
<div id="users-contain" class="ui-widget">
	<span style="font-size:15pt;">Пример с формой регистрации</span>
<h1>Существующие пользователи:</h1>
<table id="users" class="ui-widget ui-widget-content" border="0">
<thead>
<tr class="ui-widget-header ">
<th>Name</th>
<th>Email</th>
<th>Password</th>
</tr>
</thead>
<tbody>
<tr>
<td>Вася Пупкин</td>
<td>pupkin@yandex.ru</td>
<td>blablabla</td>
</tr>
</tbody></table>
</div>
<button id="create-user" class="ui-button ui-state-default ui-corner-all">Создать нового пользователя</button>

Для скрипта диалога подтверждения:

<span style="font-size:15pt;">Пример с диалогом подтверждения</span>
<div id="confirmDialog" title="Вы действительно хотите очистить корзину?">
 
Все элементы будут удалены, без возможности восстановления. Продолжить?</div>
<button class="ui-button ui-state-default ui-corner-all" onclick="$('#confirmDialog').dialog('open')">Очистить корзину</button>

Для информационного сообщения:

<span style="font-size:15pt;">Пример с информационным сообщением</span>
<div id="messageDialog" style="display:none;" title="Закачка завершена">
 
		Ваш файл был успешно загружен на сервер.
 
		Текущее использование диска <strong>53% от вашего свободного места</strong>.</div>
<button class="ui-button ui-state-default ui-corner-all" onclick="$('#messageDialog').dialog('open')">Показать сообщение</button>

И в принципе, наши диалоговые окна готовы. С радостью отвечу на Ваши вопросы, если таковые имеются. Посмотреть как это все работает можно здесь или скачать все одним архивом здесь

radmus JavaScript, jQuery , ,

  1. 10 Март 2009 в 04:09 | #1

    Неплохо было-бы на страничке с примером http://radmus.net/demo/dialogs-with-jquery/ прописать кодировку 1251…

  2. KELiON
    10 Март 2009 в 09:08 | #2

  3. 10 Март 2009 в 13:15 | #3

    @Seriy
    сделал =)

  4. шайтан
    11 Март 2009 в 18:47 | #4

    в 6 эксплорере советую посмотреть как все это работает.
    jquery - хорош, но вот ветка GUI - говенная
    для gui лучше юзать extjs

  5. 11 Март 2009 в 18:49 | #5

    Спасибо ) учтем. следующий пост возможно напишу о диалоговых окнах на extjs )

  6. Игорь
    12 Март 2009 в 00:16 | #6

    скажите, а что за плагин, который так код подсвечивает?

  7. 12 Март 2009 в 00:21 | #7

    @Игорь
    SyntaxHighlighter Plus

  8. Игорь
    12 Март 2009 в 23:11 | #8

    @Игорь
    спасибо!

  9. 15 Апрель 2009 в 11:51 | #9

    @шайтан
    использовать extjs в обычных приложения - это действительно маразм. Впрочем для необычных - тоже.

  10. vdorr
    29 Апрель 2009 в 09:27 | #10

    Спасибо, прочитал с большим интересом ваш пост. P/s интересно уточнить кое какие детали, можно узнать вашу почту или icq?

  11. 30 Апрель 2009 в 23:35 | #11

    Вот на этой странице можете найти мои контакты http://www.radmus.net/resume

  12. 2 Май 2009 в 21:08 | #12

    Используй еще функцию $.getScript(), а то нагрузка слишком большая.

  13. Kosomov
    16 Май 2009 в 18:05 | #13

    Уже пробовал - Работает.

  14. Саша
    16 Май 2009 в 18:19 | #14

    Честно, неплохая новость

  15. Xoзяин
    28 Май 2009 в 00:54 | #15

    Мдааа…, а я тут всю жизнь прожил, как-то привык ко всему этому, даже внимания на это не обращаю :) Вы тоже привыкнете :)

  1. 10 Март 2009 в 00:08 | #1

CAPTCHA image