Пишем диалоговые окна при помощи 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>И в принципе, наши диалоговые окна готовы. С радостью отвечу на Ваши вопросы, если таковые имеются. Посмотреть как это все работает можно здесь или скачать все одним архивом здесь
Неплохо было-бы на страничке с примером http://radmus.net/demo/dialogs-with-jquery/ прописать кодировку 1251…
@Seriy
сделал =)
в 6 эксплорере советую посмотреть как все это работает.
jquery - хорош, но вот ветка GUI - говенная
для gui лучше юзать extjs
Спасибо ) учтем. следующий пост возможно напишу о диалоговых окнах на extjs )
скажите, а что за плагин, который так код подсвечивает?
@Игорь
SyntaxHighlighter Plus
@Игорь
спасибо!
@шайтан
использовать extjs в обычных приложения - это действительно маразм. Впрочем для необычных - тоже.
Спасибо, прочитал с большим интересом ваш пост. P/s интересно уточнить кое какие детали, можно узнать вашу почту или icq?
Вот на этой странице можете найти мои контакты http://www.radmus.net/resume
Используй еще функцию $.getScript(), а то нагрузка слишком большая.
Уже пробовал - Работает.
Честно, неплохая новость
Мдааа…, а я тут всю жизнь прожил, как-то привык ко всему этому, даже внимания на это не обращаю
Вы тоже привыкнете