css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
29 Июн
jQuery UI – надстройка над JavaScript-библиотекой jQuery. Она поможет создавать по настоящему интерактивные веб-приложения. Сегодня мы познакомимся с виджетом Dialog.

Dialog – это плавающее окно, которое содержит область заголовка и область информационного наполнения. Окно диалога можно перемещать, изменять его размеры и закрыть, щелкнув по значку ‘x’. Если информационное наполнение превышает максимальную высоту, то автоматически появляется полоса прокрутки.
Для начала посетим страницу настраиваемой закачки на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке Deselect all component, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется – отмечаем чекбокс Dialog и видим, что вместе с ним отметился чекбокс UI Core. Работа виджета Dialog зависит от него, поэтому он необходим.
Если Вы хотите, чтобы Ваше диалоговое окно можно было перемещать по странице и изменять его размеры – отметьте дополнительно чекбокс Draggable и чекбокс Resizable. Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку Download и получаем архив. Можно испытать пример как есть, но интереснее создать свою HTML-страничку, где сначала в разделе HEAD подключить несколько файлов, которые есть в архиве.
<link type="text/css" href="css/ui-lightness/jquery-ui-1.7.2.custom.css" rel="stylesheet" /> <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script> <script src="js/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script>
Мы подключили файл стилевого оформления виджета, подключили файл библиотеки jQuery, и в третьем подключенном файле совмещены ядро UI и виджет Dialog (сюда же войдет функциональность draggable и resizable, если Вы отмечали соответствующие чекбоксы).
Если мы захотим поговорить о требованиях к HTML-разметке, которые предъявляет виджет, то окажется, что говорить практически не о чем – Вы можете сделать окно диалога из любого элемента div. Примерно так:
<div id="dialog" title="Диалоговое окно"> <p>Это окно диалога с заданной по умолчанию функциональностью. Окно диалога можно перемещать, изменять его размеры и закрыть, щелкнув по значку 'x'.</p> </div>
Все, что находится внутри элемента div становится областью информационного наполнения, а значение атрибута title становится заголовком окна.
За связь виджета Dialog с HTML-разметкой отвечает следующий фрагмент кода:
<script type="text/javascript">
$(function(){
$("#dialog").dialog();
});
</script>
Поскольку в таком виде виджет использует все настройки по умолчанию, в следующем примере мы попробуем передать ему некоторые настройки:
<script type="text/javascript">
$(function(){
$("#dialog").dialog({
position: ["right","top"],
buttons: {
"Применить": function() {
alert("Нажата кнопка Применить");
},
"Закрыть": function() {
$(this).dialog("close");
}
}
});
});
</script>
Мы передали две опции – position и buttons. С помощью опции position мы заставляем диалоговое окно появляться в правом верхнем углу. В опции buttons определили две кнопки – Применить и Закрыть, с каждой из которых связали callback-функцию. При нажатии кнопки Применить будет показано окно предупреждения, а при нажатии кнопки Закрыть, диалоговое окно будет закрыто.
Ниже приведен список доступных опций с описаниями:
autoOpen – по умолчанию эта опция имеет значение true, что означает автоматическое появление диалогового окна при вызове метода dialod. Если установить значение опции в false, то диалоговое окно будет находиться в скрытом состоянии и сделать его видимым можно будет с помощью .dialog(‘open’).
bgiframe – по умолчанию – false. Если установить эту опцию в true (потребуется дополнительно подключить плагин bgIframe), будет исправлена проблема в IE6, где элементы select помещаются поверх других элементов независимо от значения z-index. Возможно, в будущих версиях, подключение плагина уже не будет являться обязательным.
buttons – в этой опции передают объект, в котором можно определить кнопки, отображаемые в диалоговом окне, и связать их с callback-функциями.
closeOnEscape – по умолчанию эта опция имеет значение true и диалоговое окно закрывается при нажатии клавиши «Escape». Установив значение false можно запретить это действие.
dialogClass – указанное в этой опции имя класса (или классов) будут применены к диалоговому окну для дополнительного оформления.
draggable – по умолчанию установлено значение true, что дает возможность перемещения диалогового окна. Если установить значение false, перемещение станет невозможным.
height – по умолчанию эта опция принимает значение auto, и высота диалогового окна определяется его содержимым. Можно передать значение высоты диалогового окна в пикселах. Например: height: 300. В этом случае, если содержимое будет превышать установленный размер, появится вертикальная полоса прокрутки.
hide – в этой опции можно определить эффект, который будет использоваться при закрытии диалога. Например: hide: ’slide’. По умолчанию используется значение null, т.е. никаких эффектов не применяется.
maxHeight – максимальная высота, до которой может быть изменен размер диалога, в пикселах.
maxWidth – максимальная ширина, до которой может быть изменен размер диалога, в пикселах.
minHeight – минимальная высота, до которой может быть изменен размер диалога, в пикселах.
minWidth – минимальная ширина, до которой может быть изменен размер диалога, в пикселах.
modal – если установить значение true для этой опции, диалог станет модальным. Т.е. другие элементы на веб-странице будут заблокированы, и пользователь не сможет с ними взаимодействовать. Это будет достигнуто с помощью создания дополнительного слоя, находящегося ниже диалога, но выше остальных элементов веб-страницы.
position – значением этой опции может быть строка или массив, которые определяют начальное положение диалогового окна. Возможные значения: ‘center’, ‘left’, ‘right’, ‘top’, ‘bottom’. Другой вариант – использование этих же значений в массиве. Например [‘right', 'top'] для того, чтобы расположить диалог в правом верхнем углу.
resizable – по умолчанию установлено значение true, что дает возможность изменения размеров диалогового окна. Если установить значение false, то изменение размеров станет невозможным.
show – в этой опции можно определить эффект, который будет использоваться при открытии диалога. Например: show: ’slide’. По умолчанию используется значение null, т.е. никаких эффектов не применяется.
stack – по умолчанию эта опция имеет значение true, что позволяет окну (при использовании нескольких диалоговых окон на одной веб-странице), получившему фокус, быть отображенным поверх остальных окон. Установив эту опцию в false можно отменить такое поведение для выбранного окна.
title – значением опции может быть строка, с помощью которой можно переопределить заголовок окна, заданный в HTML-разметке.
width – ширина диалога, в пикселах. По умолчанию используется значение 300.
zIndex – значение z-index диалогового окна. По умолчанию используется значение 1000.
Следующий шаг – знакомимся с тем, как заставить Dialog реагировать на события. Простой пример:
<script type="text/javascript">
$(function(){
$("#dialog").dialog({
position: ["right","center"],
open: function(event, ui) {
alert("Произошло событие " + event.type);
},
dragStop: function(event, ui) {
alert("Произошло событие " + event.type);
}
});
});
</script>
В примере мы определили опции open и dragStop, значением которых являются callback-функции, вызываемые при наступлении событий открытия диалогового окна и окончания его перемещения. Эти callback-функция могут принимать два аргумента. Первый – объект event, второй аргумент – специальный объект ui, в свойствах которого содержится следующая информация:
ui.position – объект, в свойствах top и left которого содержатся значения положения перемещаемого элемента относительно родительского элемента;
ui.offset – объект, в свойствах top и left которого содержатся значения положения перемещаемого элемента относительно документа;
А теперь пример того, как можно обратиться к свойствам этих объектов:
<script type="text/javascript">
$(function(){
$("#dialog").dialog({
dragStop: function(event, ui) {
alert("ui.offset.top = " + ui.offset.top +
"\nui.offset.left = " + ui.offset.left +
"\n\nui.position.top = " + ui.position.top +
"\nui.position.left = " + ui.position.left);
}
});
});
</script>
Таких опций, связанных с событиями в виджете Dialog довольно много и ниже приведен их перечень:
beforeClose – событие dialogbeforeclose наступает, когда Вы пытаетесь закрыть диалоговое окно. Если связанная с этим событием функция вернет false – это предотвратит закрытие диалога.
open – событие dialogopen наступает при открытии диалога.
focus – событие dialogfocus наступает в момент получения фокуса диалоговым окном.
dragStart – событие dragStart наступает в начале перемещения диалогового окна.
drag – событие drag наступает постоянно во время процесса перемещения диалогового окна.
dragStop – событие dragStop наступает в конце перемещения диалогового окна.
resizeStart – событие resizeStart наступает в начале изменения размеров диалогового окна.
resize – событие resize наступает постоянно во время процесса изменения размеров диалогового окна.
resizeStop – событие resizeStop наступает в конце изменения размеров диалогового окна.
close – событие dialogclose наступает, когда диалоговое окно было успешно закрыто.
Нам осталось познакомиться с методами виджета Dialog. Для этого мы добавим в HTML-код с которым экспериментируем, пару ссылок:
<a id="openD" href="#">Открыть диалог</a> <a id="closeD" href="#">Закрыть диалог</a>
и пример javascript-кода, с помощью которого будем обрабатывать клик по ссылкам и вызывать соответствующие методы:
<script type="text/javascript">
$(function(){
$("#dialog").dialog({
autoOpen: false
});
$("#openD").click(function(){
$("#dialog").dialog("open");
});
$("#closeD").click(function(){
$("#dialog").dialog("close");
});
});
</script>
В этом примере мы инициализируем виджет, передавая значение false в опции autoOpen, скрывая, таким образом, диалоговое окно. Теперь открывать и закрывать диалог можно, щелкая по ссылкам.
Все возможные методы с описаниями перечислены ниже:
destroy – .dialog(«destroy») полностью удаляет всю функциональность виджета Dialog. Возвращает элементы в состояние, предшествующее инициализации.
disable – .dialog («disable») временно запрещает использование всей функциональности виджета. Вновь разрешить ее использование можно с помощью метода enable.
enable – .dialog («enable») разрешает использование всей функциональности виджета, если ранее она была запрещена с использованием метода disable.
option – .dialog («option», optionName, [value]) с помощью этого метода можно получить или установить значение любой опции виджета после инициализации.
close – .dialog («close») закрывает диалоговое окно.
isOpen – .dialog («isOpen») метод вернет true, если диалоговое окно уже открыто.
moveToTop – .dialog («moveToTop») помещает диалоговое окно поверх других диалоговых окон, если их используется два и более.
open – .dialog («open») открывает диалоговое окно.
Уф! Теперь Вы знаете про Dialog все! Ну или вернее почти все. Мы не рассмотрели только стилевое оформление, но об этом в будущем…
Отзывов (132) на «jQuery UI – виджет Dialog»
А как сделать чтобы при прокрутке страницы само модальное окно остовалось на одной позиции.
Заранее спасибо.
Нет такой возможности у виджета. Если и модальный режим используется это и понятно – слой между диалогом и основным содержимым все равно не даст ничего сделать и работать можно только с самим диалогом. Другое дело, если не модальный режим – но и тут все равно нет такой возможности
>> А как сделать чтобы при прокрутке страницы само модальное окно остовалось на одной позиции.
Заранее спасибо.
Может быть position: absolute ?
А вообще да, спасибо за статью, очень интересно. Как раз делаю свою CMS, но, имхо, jQuery UI не очень поодходит, т.к. достаточно много весит. Ну посмотрим.
Скорее уж тогда position: fixed, но и в этом случае без проблем в том же IE не обойтись. Там придется решать проблему через дополнительный js-код.
Кстати, ядро библиотеки ~58 кБ – не так уж и много. Если использовать готовые виджеты при создании CMS, тогда да. Но имхо – это не тот путь. Много лишнего. Тут только свое писать надо…
Класна стаття,.. майбутнє «web» за jQuery UI !!!
Народ, а этот гаджет под гавноИЕ работает?
ребята, подскажите, почему в ИЕ6 и других не работает?
Это вывод дива:
***
Введите E-mail:
***
В ИЕ он всегда виден.
Это функция вызова модального диалога:
***
$(function(){
$(‘#dialog1′).dialog({
autoOpen: false,
//position: ["center","center"],
width: 300,
//height: 70,
title: «Отправьте ссылку другу»,
modal: true,
buttons: {
«Отправить»: function() {
alert(«Нажата кнопка Применить»);
},
}
});
***
Везде кроме ИЕ норм работает.. куда копать? =(
>> Скорее уж тогда position: fixed
фу, конечно же fixed, я перепутал.
Я говорю про то, что именно jQuery UI много весит. А просто jQuery юзаю, в принципе нормально, подходит.
To Алексей: он работает под IE 6.0+, FF 2+, Safari 3.0+, Opera 9.0+, Chrome. К сожалению Ваша HTML-разметка не видна, поэтому сказать что-то трудно, но скорее всего дело именно в ней и ее стилевом оформлении. Попробуйте взять для начала стандартный архив с сайта jQuery UI и начать работать с ним, понемногу изменяя его под себя.
> Алексей
alert(”Нажата кнопка Применить”);
}, <- лишняя запятая
}
убери лишнюю запятую, ie их не любит
Этому диалогу очень не хватает парамтра который бы убирал крестик в правом верхнем углу [x] это можно сделать так
$(«»).dialog({/*параметры*/}).parent().find(«.ui-dialog-titlebar-close»).hide();
Не забывайте, если указываете размеры (ширину и высоту) в процентах, то заключайте значения в кавычки!
Проблема с модальными окнами:
JavaScript:
// Установка модуля
function InstallMod(mod, dirname) {
$(«#mod-name»).append(mod);
$(«#dialog»).dialog({
bgiframe: true,
resizable: true,
height:140,
modal: true,
overlay: {
backgroundColor: ‘#000′,
opacity: 0.5
},
buttons: {
‘Установить’: function() {
$(this).dialog(‘close’);
$.ajax({
type: ‘POST’,
url: ‘/’ + getCookieLang + ‘/admin/install_module/’ + dirname,
timeout: 3000,
beforeSend: function(){
BlockUIshow();
},
success: function(data){
$.unblockUI({
onUnblock: function() {
$(«#dialog2″).dialog({
bgiframe: true,
modal: true,
buttons: {
Ok: function() {
$(this).dialog(‘close’);
window.location.reload();
}
}
})
}
});
}
})
},
‘Отмена’: function() {
$(this).dialog(‘close’);
}
}
})
}
Вызываю функцию так:
Установить
Модальное окно открывается и прекрасно работает. Но, если закрыть его с помощью метода $(this).dialog(‘close’); , то при очередном вызове по ссылке оно не открывается, пока не перезагрузишь страницу. С Jquery & javascripts мало работал. только учусь
Помогите, плиз =)
PS: С помощью onclick=»javascript: InstallMod(‘Новости’, ‘news’);» такая же проблема
Вызываю функцию так:
{a href=»javascript: InstallMod(‘Новости’, ‘news’);» title=»Установить модуль»}Установить{/a}
закрывай через destroy
Спасибо! Я уже использую $(«#dialog»).dialog(настройки).dialog(‘open’)
Всё сделал по инструкции. Открываю страницу, а этот диалог уже в состоянии – появился и без оформления. ЦСС проверил, подключено, библиотеки тоже. Вообще, когда вызываю диалог, брауз пишет, что это свойство или метод не поддерживается. Браузеры, ИЕ, Опера, ФФ
Если Вы видите сообщение, что свойство или метод (которые определены в подключаемом внешнем файле) не поддерживаются, то скорее всего просто неправильно указан путь к внешнему файлу и только…
подскажите как сделать чтобы окно диалог закрывалось автоматически через 3 секунды
а никто не сталкивался с проблемой позиционирования?
т.е. если окно со скролингом, то dialog появляется по центру относительно всей длины страницы, а не высоты окна.
ага.. проблему можно так решить..
в стиле .ui-dialog тупо поставить отступ к примеру margin-top:10%;
Через 3 секунды после чего? Открытия? Тогда отследите момент открытия с помощью open (событие dialogopen наступает при открытии диалога) и запускайте таймер, а по таймеру вызывайте метод close. Как-то так примерно…
А есть ли возможность если вызвано модальное окно закрыть его нажав кнопку мыши вне его как в скрипте jqModal или тому подобных?
Да, конечно. Читайте внимательнее – метод close. В статье даже пример есть.
Я плохо разбираюсь. Можно меня ткнуть туда куда нужно? А то я чего то не разберусь как это делается.
Да я вроде и ткнул…. Последний пример в статье – клик на ссылке с #closeD закрывает диалог…
А как это мне поможет когда окно модальное? Мне нужно кликнуть в любой точке за пределами формы и она закрылась. Можно какой нибудь рабочий пример?
Геннадий, Алексей, и все – приветствую!
Не могу решить простую проблему – вызвать повторно окно Dialog с тем же содержимым, с которым оно было вызвано в первый раз.
Поясню – использую Dialog с Ajax-ом. В него подгружаются и выдаются данные. Потом Dialog закрываю, и хочу вызвать снова – показывает последнее содержимое, а точнее – пустой div. Да это и понятно.
Перезагрузкой делать не хочу, как-то надо прописать обратно первоначальное содержимое.
Чувствую, что всё проще, чем думаю.
Алексей вроде решил проблему – хочу видеть решение. Геннадий, если есть что красиво подсказать – буду рад.
а на каких условиях можно использовать данный плагин для своего сайта? никаких авторских прав не нарушится?
Библиотека, и UI тоже, распространяется под лицензиями MIT и GPL.
спасибо))
To aki-man:
С ходу вряд ли что-то смогу посоветовать, тем более красиво
Надо включаться, и понять проблему, но к сожалению сейчас просто ни грамма свободного времени…
опция show работает не корректно, все содержание окна уезжает наверх((
Конечно, надо же, какой плохой плагин, а!
Может стоит быть немного скромнее и написать: «У меня опция show работает не корректно«?
З.Ы. Попробуйте разобраться со стилевым оформлением содержимого – скорее всего дело именно в этом.
Решил проблему, товарищи..
Пока спрашивал – уже зерно решения зрело
(Как учил Кесаманлы Фагам Паша оглы (физик СПбГПУ) – «прежде чем спросить, подумай, а не знаешь ли уже ответ на свой вопрос»)
При открытии Dialog-а загружаю Ajax-ом в div с id=»dialog» необходимую начальную инфу. Да и default-ные кнопки также вынес в отдельную функцию
Осталось навести красоту и подключить Json.. Технология очень интересная, но никак не решусь попрактиковаться в применении. Обчитал тут всё по ней, осталось – «вперед и с пестней».
Кстати, Геннадий, оффтопик – есть ли возможность сделать тут так, чтоб код скрипта в постах читабельным был? а то все по левому краю..
ага обычно все сразу делается идеально, а все остальные дополнения, апгрейды, версии… просто так…)) даже если применить show: ’slide’ к примеру с источника, раскрывается пустое окно, может быть проблема в эффекте ’slide’, есть ли другие эффекты к этой опции?
действительно плагин хорош) надо было просто полный пакет скачать))
Я так понимаю – все ок? Просто опция show:»slide» нормально работает… Другое дело, если использовать другие эффекты (их приличное кол-во), то насколько помню надо подключать еще jquery.easing.js – это всякие-разные доп.эффекты. А «slide» и так есть. И вроде бы еще какой-то один.
To aki-man
У меня стоит плагин к вордпрессу, но как-то он кривовато работает, сам бывает мучаюсь, когда очередной пост пишу… Но кое-как обхожусь, а разбираться некогда, другой работы по горло.
Как всегда – сапожник без сапог
а как сделать так, чтобы повторное нажатие по кнопки «открыть окно» закрывало бы его?
olliwer, ну Вы даете… Догадаться попробую…. Значит есть кнопка, кликом по которой окно диалога открывается. Надо, чтобы второй клик по кнопке это окно закрывал. Так как-то?
Ну, тогда можно попробовать метод toggle – есть такой в jQuery. Что-то вроде:
$("button").toggle( function(){ $("#dialog").dialog("open"); }, function(){ $("#dialog").dialog("close"); } );попробуйте, походу должно заработать. Сам не проверял – код из головы набрасывал…
что-то с toggle не получилось, я решил еще проше,
$(‘#dialog’).click(function(){
$(‘#dialog’).dialog(‘close’);
return false;
});
тут совсем другая проблема возникла, с position, при выставлении [‘center', 'top'] окно открывается везде как надо, в середине видимого окна, кроме Opera 9, тут оно воспринимает ‘center’ буквально, открывает его в «центре», можно ли позиционировать по другому, процентами ли px?
Можно в массиве передать значения и в пикселах.
точно, спасибо))
Как сделать так, чтобы при открытии диалогового окна любое другое закрывалось автоматически.
Пробовал прописать всем один класс и по open закрывать все окна с таким класом .. но тогда не происходит открытие так как у него тоже есть такой класс
$(this).dialog(»);
$(«#dialog2″).dialog(‘close’);
т.е.
$(this).dialog(«open»);
$(”#dialog2″).dialog(’close’);
используй не один класс..
Дело в том что я не знаю какое окно открыто …. а перебирать все не хочется
Сейчас закрытие и происходит по ИД как вы и написали … но хочеться что то более универсального
эм.. может глупость, но если так..?
$().dialog(‘close’);
$(this).dialog(”open”);
COOL, а зачем отказываться от классов? Я деталей Вашего кода не знаю, но попробую пояснить идею на выдуманном примере – сразу будет ясно. Пишу подробно, сократить код всегда успеется
$("#open2").click(function(){ var current = $("#d2").dialog("open"); $("div.dialog").not(current).dialog("close"); });Пусть у нас некоторый диалог #d2 открывается кликом по ссылке #open2. Ес-но есть диалог #d1, #d3 и т.д. и каждый чем-то открывается.
В моем коде в обработчике клика сохраняем ссылку на открывающийся диалог, затем выбираем вообще все диалоги (в т.ч. и этот) по имени класса, а с помощью not() исключаем из набора только что открытый диалог. Ну, и закрываем все остальные….
спасибо … то что надо
у меня еще один вопрос
вот допустим в диалоговом окне открывается форма авторизации … как можно сделать чтобы она отправлялась по нажатию клавиши Enter.
а то мышкой кликать не всегда удобно
кнопки добавлены через buttons
В области наполнения просто надо иметь традиционную форму, поскольку кнопки, определяемые в опциях, служат для управления собственно окном, а не наполнением. Мудрить конечно можно – для соответствующей кнопки определить callback-функцию, которая отыщет нужную кнопку (они в div.ui-dialog-buttonpane находятся), и будет связывать с кнопкой обработчик события в котором отслеживать нажатие Enter. Но думаю, что на этапе навешивания обработчика уже ничего не получится.
Так что совет – не мудрить
я так и думал что будет проще сделать именно так
спасибо за ответ
может попробовать просто фокус передать на «отправить» (если это возможно..)?
Дело в том, что внутри callback-функции, связанной с кнопкой, можно отыскать саму кнопку (это не будет this, поскольку this там ссылается на сам объект диалогового окна), и что-то получить от нее (ну, например ее текст), и это довольно просто. Но вот воздействовать на нее (не изменяя код самого плагина) – это вряд ли.
У меня два вопроса.
1. На события окна навешиваются функции, вторым параметром которых будет некий объект ui. Вопрос во в чем где можно найти список всех свойств данного объекта? А так же для других виджетов? На официальном сайте уже помоему все перерыл – не нашел.
2. В UI CSS Framework есть класс тени ui-widget-shadow. А вот как тень прицепить тень к диалогу, что-то пока не догоняю. Может кто делал?
Свойства объекта можно узнать вот так:
function showProperties(obj) { var result = "Свойства объекта:" + "\n"; for (var i in obj) { result += i + " = " + obj[i] + "\n"; } return result; }Со вторым вопросом не помогу – практически никогда не использую предоставляемое оформление.
Хм. Добавление тени я вроде бы реализовал.
$.fn.shadow = function(){
var that = this.parent(‘.ui-dialog’);
var id = that.attr(‘aria-labelledby’) + «-shadow»;
if( !$(«#»+id).length )
$(that).before(»);
var shadow = $(«#»+id);
shadow.width( $(that)[0].offsetWidth )
.height( $(that)[0].offsetHeight )
.css({
position: ‘absolute’,
left: $(that)[0].offsetLeft,
top: $(that)[0].offsetTop,
zIndex: $(that)[0].zIndex
});
return this;
};
вызывается $(«#dialog»).dialog().shadow()
А вот как потом из функции shadow навесить обработчики на диалог, чтобы при перемещении и ресайзе контролировал слой с тенью, пока не пойму.
А можно как-то сделать, чтобы кнопки на диалоговом окне не выделялись курсором? Когда у меня окно появляется, первая кнопка выделена для нажатия, мне надо убрать эту возможность.
Если кнопки созданы в опции buttons, то можно в опции open (т.е. при открытии диалога) написать что-то вроде этого:
open: function(){ $("div.ui-dialog-buttonpane button").blur(); }Идея понятна, да? Просто принудительно убрать фокус с этих кнопок.
Да, понял. Спасобо, попробую!
ЗЫ может знаешь: есть ли плагин просто для кнопок, вне диалогов?
Не понял З.Ы. – что значит плагин для кнопок? Да и зачем, если навесить обработчик того же клика на кнопку – несколько ударов по клавиатуре…
Чтобы писать $(selector).addButton(name, func) и в селектор добавлялась кнопка, такого же внешнего втда, как и в диалоговом окне библиотеки ui. Можно конечно и самому написать, просто выдрав код из тех же диалогов, но хочется уже готового.
Подскажите, а как можно повесить на кнопку ссылку?
например подтверждение перехода по ссылке:
$(function(){
$(«#dialog»).dialog({
autoOpen: false,
modal: true,
buttons: { «Да»: function(){// отправить пользователя на google.com },
«Нет»: function(){$(this).dialog(«close»);}}
});
$(«.openD»).click(function(){
$(«#dialog»).dialog(«open»);
});
});
То есть при клике на кнопке «Да», нужно чтобы диалог закрылся, а юзер пошел на указанный сайт. Как? второй день морочусь.
function(){
// отправить пользователя на google.com
location.href=»http://www.google.com»;
}
2 Gennady
Спасибо большое.
Столкнулся с еще одной проблемой. Как при помощи этого виджета можно организовать подтверждение перехода не по определенной ссылке, а по ссылке которую нажал пользователь.
Например ссылка предназначена для удаления какой-то строки в БД.
Например http://127.0.0.1/delete.php?id=123.
Как можно сделать так чтобы перед переходом по этой ссылке пользователь дал подтверждение в диалоговом окне?.
Все варианты какие пробовал, не получились. Диалог либо не реагирует на клик либо сразу переходит по ссылке без подтверждения, при этом окно диалога мелькает на полсекунды.
Ну, что-то вроде такого: на ссылки вешается обработчик клика (не забудьте тогда в нем return false; сделать, чтобы предотвратить действия браузера). В нем обращаться к кнопке открытого диалога ( в комментах выше есть пример) и вызывать клик на нужной кнопке. В опции buttons, для этой кнопки делать переход куда нужно.
Только как-то это слишком заморочено получается…..
Привет всем!
А не подскажете ли как связать кнопку с $(‘#myForm’).ajaxForm(); ?
Я начал изучать javascript совсем недавно и многое еще не понимаю.
Дело в том, что я вызываю диалог, в котором есть форма. Мне нужно заменить на $(«#dialog»).dialog({
buttons: {}
})
С кнопкой «CLear» я уже разобрался: «Clear»: function() {
$(«#myForm»).clearForm();
}
Заранее благодарю.
А что мешает в buttons определить еще кнопку, например какой-нибудь «OK» и к ней привязывать передачу формы?
Не хочу показаться законченным ламером.
Но у меня нет ни малейшего представления как %)
Ну, в buttons можно и не одну кнопку определить. В статье есть пример как именно это делать. С одной кнопкой Вы разобрались, другие – так же. Т.е. идею-то Вы уже поняли. В buttons – название кнопки и функция, которая вызывается при нажатии на эту кнопку… И т.д…
Уже пробовал вот таким образом:
$(”#dialog”).dialog({
buttons: {
OK: function{
$(’#myForm’).ajaxForm();
}
}
})
Но не получилось. Диалоговое окно не закрывалось и было непонятно: передаются ли параметры post вообще? Я поэтому и решил спросить у знающих.
Диалоговое окно и не закроется таким образом. Для того, чтобы оно закрылось, нужно еще и соответствующий метод вызвать в этой функции (в статье про это тоже есть).
Что же касается передачи параметров (да и отладки вообще) – Fire Bug Вам в помощь https://addons.mozilla.org/ru/firefox/addon/1843
2 Gennady
Спасибо. Попробую
Убил целый день, но так и не смог разобраться.
Может подксажете как можно «привязать» передачу формы?
Гена, к вам вопрос такого характера. Со всеми этими функциями и настройками мне все понятно. Вот только как решить следующую задачу – я пока как-то подтормаживаю.
Вот у нас есть диалоговое окно, передвигаемое по экрану. Оно несе тна себе функцию комментариев. То есть допустим есть в тексте некая ошибка: человек вызывает окошко, пишет туда в форму текст, отправляет его на сервер и пододвигает окошко на нужное место.
Как сделать, что бы это окошко в следующий раз открылось именно в этом месте? То бишь именно на этой странице и именно в этой части страницы…
Я так понимаю, что что бы запомнить место положение окошка на странице, можно добавить в базе данных две колонки с параметрами х и у и при передвижении передавать их на сервер, а при следующей загрузке вызывать окошко именно по этим параметрам из БД.
Но как быть с приписыванием к конкретной странице? В том же wordpresse например. Открываем главную страницу – висит заметка, привязанная к слову в посте (хотя по сути к месту на странице). Открываем отдельно страницу поста – а там ее уже нету. Может лучше сделать привязку как-то к конкретным местам в посте? Но как сделать так, что бы невладелец поста мог туда что-то добавлять… Вобщем надеюсь мысль понятна.
Если можете, накидайте примерный код, хотя бы образный – буду очень Вам благодарен.
…можно добавить в базе данных две колонки с параметрами х и у…
… а также с url страницы и идентификатором пользователя.
Это конечно универсально, но, имхо, очень затратно. Если универсальность не так уж критична, может стоит хранить все это в cookie? Тогда понадобятся только x, y и url.
Код вряд ли набросаю, мои извинения, но 24 часов в сутках не всегда хватает, а плагинчик, который поможет в работе с cookies на блоге найдете.
ну к сожалению куки не подойдет… =(
Хочу сделать так, что бы один оставил заметку, второй – на другом совсем компе, мог открыть страницу и увидеть эту заметку в нужном месте. (или я чего- то не понимаю в работе куков?)
Я думаю идентификатор пользователя не понадобиться. Сделаю так, что бы править, удалять или создавать заметки могли все (и настроечку в плагине все или хозяин владеют этими правами). Так проще будет.
ЗЫ: посидел, подумал… решил, что появление одного нотиса сразу на главной странице с лентой постов и на старнице поста нафиг не нужнО… =)
Нет, с куки Вы все правильно понимаете – доступно только тому, кто делал. Это я не разобрался в том, что Вы хотите реализовать. Тогда да – только база. И ид пользователя не нужен (только если по каким-то другим причинам – а ну как кто гадости писать начнет
).
Последнюю мысль всецело поддерживаю – про нафиг не нужнО… У самого так часто бывает…
Доброго времени суток
У меня проблема следующего рода:
На батоны «ДА» и «НЕТ» навешены действия «ДЕЙСТВИЕ 1» и «ДЕЙСТВИЕ 2» соответственно.
Необходимо при события onClick изменить параметры диалога, то есть, навесить другие «ДЕЙСТВИЯ N»
Выглядит следующим образом.
….
$(function(){
$(«#msgDialogYesNo»).dialog({autoOpen: false,width: 450,buttons: {«ДА»: function(){ ДЕЙСТВИЕ 1 },»НЕТ»: function(){ ДЕЙСТВИЕ 2 }}});
});
….
….
Параметры не изменяются.
Подскажите, пожалуйста, что не так???
Вариант создания нескольких окон не реален (все в динамики)
Ммм, а почему бы после выполнения «действия 1″ не удалить баттон и вместо него запихнуть другой такой же(ранее скрытый) с уже предустановленным «действием N»? Нет? По крайней мере лично мне так кажется проще…
Проблема заключается в том, что даже при вот таком раскладе:
$(«#msgDialogYesNo»).dialog({autoOpen: false,width: 450});
$(«#msgDialogYesNo»).dialog({«ДА»: function(){ ДЕЙСТВИЕ 1 },»НЕТ»: function(){ ДЕЙСТВИЕ 2 }});
Когда идет определение параметров не за один раз(как показано выше)… Батончиков не будет…
Возможно я что то упускаю, но над этой проблемкой уже пол дня бьюсь(к сожалению безрезультатно).
Генерить множество кнопочек не представляется возможным, в связи с тем, что диалог, является подтверждением при удалении записей БД.
ДЕЙСТВИЕ N – по сути переброс параметров…
Вот код который не попал в мой первый пост(заменен был на …):
img src=»1.jpg»…. onClick=”$(«#msgDialogYesNo»).dialog({buttons: {«ДА»: function(){ ДЕЙСТВИЕ 3 },»НЕТ»: function(){ ДЕЙСТВИЕ 4 }}}); $(«#msgDialogYesNo»).dialog(‘open’); ” …
img src=»2.jpg»…. onClick=”$(«#msgDialogYesNo»).dialog({buttons: {«ДА»: function(){ ДЕЙСТВИЕ 7 },»НЕТ»: function(){ ДЕЙСТВИЕ 8 }}}); $(«#msgDialogYesNo»).dialog(‘open’); ” …
VKS, для того чтобы менять значение опций виджета после инициализации используется метод .dialog(‘option’, optionName, [value]) – с его помощью получают/устанавливают значение любых опций, в том числе переопределить можно и опцию buttons (по крайней мере в доках заявлено, но сам не пробовал).
?
Только зачем такие сложные сложности-то
Пусть у Вас обработчики для этих кнопок будут функциями, которые могут принимать какие-то параметры. Получила функция один параметр – одно действие, изменился параметр – другое действие.
Так логичнее, не находите?
Gennady, большое спасибо!
Все заработало…
А вариант передачи параметров «вне», нахожу логичным!, но не в моем случае, это порождает лишние действия!
На мой взгляд любые диалоги пораждают лишние действия… =)))
Здравствуйте!
Если оверлей, в модальном режиме, разварачиваеться не на всю длину* страницы, помагает
open : function() {
jQuery(‘div.ui-widget-overlay’).height(jQuery(document).height());
}
* у меня такое на наблюдаеться в jQuery UI 1.7.2, тема оформления ui-lightness в браузерах Opera 9.63 и Firefox 3.0.14
Здравствуйте,
я пока не особо дружу с jquery и все отлично работает за исключением одного момента:
$(‘#dialog’).dialog({title: «456″});
не работает и все тут.. мож подскажете в чем тут дело?
Странно, но это должно сработать, т.е. установить заголовок диалогового окна даже в том случае, если Вы значение без кавычек будете передавать (как число).
отписка от комментов
Вобщем сделал немного по другому и заработало все:
$(‘#dialog’).dialog(‘option’, ‘title’, ‘456′);
Отличная штука это jQuery UI Dialog.
Одно «но»: в IE открывается мучительно долгоооооооо..
FF) открытие окошка занимает около 1 сек.
IE8) открытие окошка занимает около 3 сек.
IE6) около 10 секунд…
Это ж просто трындец..
Никакие данные в момент открытия окна не подгружаются.. Все загружено до открытия окошка.. Нужно всего лишь отобразить загруженный контент.. И это занимает столько времени.. Кто-нибудь знает в чем проблема??
$(«#dialog»).dialog({
bgiframe: true,
autoOpen: false,
modal: true,
draggable: false,
resizable: false,
width: 1000
});
$(‘#ets_edit’).click(function() {
/*10 секунд занимает вызов этой функции*/
$(«#dialog»).dialog(‘open’);
}
проблема скорее всего не только в самой компоненте, а в том, что Вы делает на онопен, либо на $(’#ets_edit’).click (Возможно, на всплывании еще что-то тяжелое)
на onopen ничего не выполняется.
Вот весь код:
$(function() {
var param1 = $(«#param1″),
param2 = $(«#param2″),
allFields = $([]).add(param1).add(param2);
$(«#dialog»).dialog({
bgiframe: true,
autoOpen: false,
modal: true,
draggable: false,
resizable: false,
width: 1000,
buttons: {
‘Сохранить’: function() {
$(this).dialog(‘close’);
},
‘Отмена’: function() {
$(this).dialog(‘close’);
}
},
close: function() {
allFields.val(»).removeClass(‘ui-state-error’);
}
});
$(‘#ets_edit’).click(function() {
$(‘#dialog’).dialog(‘open’);
})
});
все запросы к БД выполнены до всплывания окошка, весь контент подготовлен заранее.. остается только его отобразить на $(’#ets_edit’).click(function()..
получается, прорисовка самого окна занимает столько времени.. а почему??
с дизайном окошка я ничего не шаманил, стандартная тема UI Lightness.
Юрий, а зачем Вам тут вообще довольно тяжелый виджет? Насколько видно из настроек, изменять размеры Вам не надо, перемещать тоже…
Почему не сделать обычный скрытый до поры div, который будет открываться по нужному событию?
Имхо, и проще, и легче, и быстрее…
всплывает довольно эффектно, draggable и resizable отключил в процессе тестирования скорости загрузки.
Когда вопрос со скоростью загрузки будет решен – включу обратно..
Да и потом, раз уж сделал с помощью этого виджета – то хотелось бы уж разобраться до конца что его так тормозит!! и почему именно в IE.
неужели никто не сталкивался с подобной проблемой??
кое-какие зарубежные источники нашел на эту тему, но внятного ответа там тоже никто не дал…
Геннадий пожалуйста объясните почему так работает
$(«#dialog»).bind(‘dialogbeforeclose’, function(event, ui) {
$(«#ui-datepicker-div»).hide();
});
а вот так не работает
beforeclose: function(event, ui)
{
$(«#ui-datepicker-div»).hide();
},
В официальной документации они стоят рядом и выполняют одно и тоже -выполняют код перед закрытием окна диалога. Если во втором случае я ставлю сlose то все отрабатывает но не так как мне нужно (после закрытия диалога) А мне нужно перед закрытием. В чем тут секрет? Такое ощущение что beforeclose что то неизвестное. Ведь все другое работает.Спасибо
В оф.доках рядом – это понятно. Можно определить beforeclose в настройках, можно биндить соответствующее событие.
Но работает beforeclose так, как и должно – выполняет функцию перед закрытием диалога.
Ну, не знаю, попробуйте вот такой простой код:
$(function(){ $("#dialog").dialog({ beforeclose: function() { alert("BEFORECLOSE"); }, close: function() { alert("CLOSE"); } }); });алерт с BEFORECLOSE появится, когда диалог еще не будет закрыт, с CLOSE только после закрытия диалога.
Здравствуйте!
Я хочу использовать Dialog в качестве модального окошка при загрузке страницы, автоматически закрывающегося при окончании загрузки.
Попробовала вставить код в самое начало body
LOADING…
$(«#dialog»).dialog({
position: ["center","center"],
modal: true,
});
$(function() {
$(«#dialog»).dialog(«close»);
});
Но в таком случае окошко появляется не в начале загрузки страницы.
Возможно в принципе использовать Dialog так, как я задумала?
В принципе, наверное, да. Но только учитывайте, что конструкция
$(function() { $(”#dialog”).dialog(”close”); });отработает в момент готовности DOM (т.е. могут еще быть не загружены какие-то баннеры, прочая муть
), а Вы тут уже диалог закрываете…
Логичнее в момент готовности DOM вызывать диалоговое окно, а закрывать его например по событию load какой-нибудь большой картинки (не знаю что там у Вас грузится…).
А вообще, использовать тяжелый виджет для таких целей – очень расточительно, имхо. Вполне сгодился бы простенький div, появляющийся в начале и скрывающийся по окончанию загрузки чего-либо…
Спасибо.
Подгружается база.
А окошко должно появляться при перезагрузке страницы, сделав ее неактивной, чтобы пользователь не мог начать работу до полной загрузки.
Попробовала несколько вариантов div’ов, но и они также появляются не с самого начала перезагрузки, слегка запаздывая.
Геннадий, подскажите пожалуйста а какое событие нужно вызвать чтобы как только окно отриосовалось в него загрузились данные Если делаю так
open: function(event, ui) {
$.ajax({
url: «insert_pair.php»,
cache: false,
success: function(html){
$(«#insert_pair»).html(html);
То начинает ну оооочень жутко тормозить в IE и Mozilla Я пробовал ставить событие focus но оно тоже вызывается раньше чем окно полностью отрисовывается и торможение не проподает Может можно как то сделать событие AfterOpen открылось и тут же подгрузились данные
Я попробовал сделать по open – никаких «тормозов», работает на ура! Не знаю, может в Вашем коде какая ошибочка есть? Не должно тормозить, ведь div диалога присутствует в DOM изначально, еще при инициализации, просто он скрыт. Получается, что не имеет значения, когда возвращаются данные ajax-запроса – они все равно будут вставлены в изначально существующий элемент.
Повесила Dialog на iframe:
в который передается адрес странички. На этой страничке кнопка
Можно ли сделать так, чтобы при нажатии на эту кнопку закрылось окно Диалога?
Извините, не отобразился код:
/* */
/* */
При нажатии кнопки происходит событие: onClick=»window.close();
Геннадий подскажиет пожалуйста я просто вижу не у одного меня такая проблема ( похожие проблемы комментарии 90 и 93) Я стараюсь вызвать одно и тоже окно диалога и з разных метовдов. И мне нужно переопределять title.
В одном методе пишу $(«#dialog»).dialog(
{ position: ["left","top"],
title:»Запись новой пары»,
hide: «slide»,show:»slide»,height:400,width:700,
zIndex:999, и тд много опций
Во втором
$(«#dialog»).dialog(
{ position: ["left","top"],
title:»Обновление пары»,
hide: «slide»,show:»slide»,height:400,width:700,
zIndex:999, и тд много опций
Но все время заголовок title:»Запись новой пары»,
(методы рабоатают точно разные) Как можно еще переопреелить
Геннадий извиняюсь ступил Не отвечайте Мой баг
Угу, то я и думаю – тут же все просто вроде…
Господа подскажите пожалуйста в чём может быть дело?
$(function(){
$(«#dialog»).dialog({
autoOpen: false,
modal: false,
height:450,
width:450,
open:function(event, ui){
$(«#dialog»).load(«/adress1.php»);}
});
$(«#openD»).click(function(){
$(«#dialog»).dialog(«open»);
});
});
При первом открытии – всё работает, как надо. При повторном открытии в IE 6 – высота окна становится минимальной.
Добавлю, что при загрузке простого контента из div – всё работает как часы!
Проблема видимо в $(”#dialog”).load(”/adress1.php”).
Но вот что делать – ума не приложу!
А не пробовали грузить не непосредственно в #dialog, а в какой-либо элемент внутри него? Ну, мало ли…
Второй вариант – кэш? Метод load подразумевает GET-запрос (если не передаются параметры), а GET-запросы – это первые кандидаты на попадание в кэш… Дальше не придумал
На самом деле уже разобрался.
Прикол в том, что, почему то IE 6 и IE 7 глючит, если на странице не указан тип документа.
В самом начале перед тегом должна быть запись:
Опера и ФФ – игнорируют.
Вопсчем. Нашёл методом исключения.
Геннадий есть такая ситуация. Диалоговое окно. При его открытии в событии open в него аяксом грузится определ. данные. У меня и раньше не получалось сделать чтобы разный контент грузился в одно дилог. окно (одна html разметка), Я плюнул и стелал несколько диалог окон в каждое из которых грузится свой контент. Но сейчас встала проблема данные нужно загрузить одним меотодом в зависимости от выполнения условия в одно и тоже диалог. окно. НО все время вызывается диалог с теми данными которые были загружены первыми. Только после полной перезагрузки страницы можно вызвать дилог с другим условием(с другими данными) но потом только с ними то есть опять нужно перегружаться. Была такая проблема когда я в разные диалогов. окна грузил разные контенты но там попадались одинаковые id тогда во вторым вызываеемом окне эти элементы просто не работали А сейчас получаестя я в один и тот же диалог гружу в зависимости от условия один и тот контент и тот что был загружен первым грузится постояянно. Вопрос могу ли я в один и тот же диалог грузить аяксом разные контенты (в зависимотси от условия) Или что нужно каждый раз создавать новую html разметку для диалога
Добавил в каждое из условий
close: function(event, ui) {
$(«#dialog»).dialog(‘destroy’);
}
И перестало вызываться одно и то же окно при последовательном вызове для двух разных условий
Если честно, я так и не понял – вопрос решился?
Ага Геннадий решился. Но если честно я не понимаю почему так. Ну есть у меня два контента для одного дилога и в зависимости от устловия они грузяться, То есть если одно условие я открываю диалог гружу туда то что надо. Если другое я опять же открываю этот же диалог. Открываю используя dialog(open ) Я на входе условий поставил алерты и видел иф-элс работают правильо но вызывался все время (если два раза полседовательно выбрать разные условия) только диалог для условия которое было выбрано первым. Я протсо взял потом и в каждм диалоге в свойствах прописал
close: function(event, ui) {
$(”#dialog”).dialog(’destroy’);
}
И стало вызываться как нужно в зависимсти от условия. Я не пойму что обязательно при закрытии нужно дестроить диилог если он вызывается из разных условий?
Если грузите ajax-ом, то вероятно свое влияние оказывает кеширование запросов, видимо поэтому такое поведение.
Здравствуйте. Как сделать при show и Hide эффект изменения прозрачности или типо explode. А то работает только slide
fadeIn() и fadeOut() работают аналогично show() и hide() – скрывают и показывают элементы, но с использованием изменения прозрачности.
А можно сделать так что бы dialog выезжал с того места откуда было нажато?
Самому поэкспериментировать времени нет, но теоретически это возможно. Попробуйте перед открытием диалога методом .dialog(«open») по клику где-то, получать координаты указателя мыши, затем передать значения координат методу .dialog («option», optionName, [value]) чтобы установить свойство position, и только затем вызывать .dialog(«open»).
Здравствуйте. У меня при клике на кнопку появляется окно диалога и сразу исчезает. фантастика просто. Подскажите в чём проблема?
Спасибо в очередной раз!
Вот возникла необходимость в интерактивном приложении, а я лезу не к буржуям с их мовой … а к дорогому сердцу Gennady
Мой глупый вопрос:
Как (или возможно ли) передать параметры диалогу для того чтобы использовать их во время ‘open’?
Например:
1) Инициализация диалога
$(«#dialog»).dialog({
modal: true,
draggable: false,
resizable: false,
autoOpen: false,
open: function(event, ui) {
get_infoFor();
}
});
2) Обработчик
$(‘.view_info’).click(function(){
var thisId = $(this).attr(‘id’); //Собственно вот этот ID
$(‘#dialog’).dialog(‘open’); //Открываю диалог
});
3) Ajax Функция выборки информации
function get_infoFor(id)
{
alert(id); //для экономии места Ajax заменен alert
}
Пока выкрутился из ситуации вставив ajax в обработчик. Т.е. обработчик готовит мне HTML диалога, после чего вызывает диалог.
TRAHOMOTO, Вам точно именно dialog нужен? Просто смотрю, что draggable: false, resizable: false, autoOpen: false… Не проще ли использовать обычный div, изначально скрытый? Сразу же получаете + за то, что избавляетесь от громоздкого плагина и в общем ничего не теряете в функциональности.
Все тоже самое – при клике на .view_info получаете id, отправляете ajax-запрос на сервер и при получении ответа открываете div с вставленными туда данными (если идею я правильно понял)…
Да в том-то и дело, что используя dialog у меня «не болит голова» про modal, про разметки и пр. чепуху … я работаю только над выборками. Темболее, что я использую и другие виджеты UI. К тому же пример статический, но ведь такое бывает не часто и в моем случае, я активно «аяксую» содержимое диалога.
Я написал, что вопрос глупый … т.е. я решил проблему, но вот если есть вариант передачи доп. параметров методу open такое решение было бы элегантнее, тут думаю вы согласитесь со мной.
Кстати если хотите я пришлю вам свой код, может дополните статью.
Вобщем если что пишите, мыло в сообщении.
Здравствуйте. Подскажите пожалуйста. У меня есть много диалогов, количество меняется динамически, аяксом. У всех одинаковый класс, поэтому при открытии одного, происходит открытие остальных. Так вот как бы так сделать чтобы не использовать для каждого диалога свой класс или ид, и не писать для каждого из них одинаковый обработчик события?
Вот обработчик:
$(‘div.dialog’).dialog({
autoOpen: false,
draggable: true,
close: function(event, ui){
$(«div.dialog»).dialog(‘destroy’);
}
});
$(«span.showDialog»).click(function(){
$(«div.dialog»).dialog(‘open’);
});
ПС: span.showDialog для каждого div.dialog естествено должен быть свой.
ППС: при открытии диалог почему-то не могу двигать, даже когда draggable: true ставлю.
to brodya
Лично я выхожу из такой ситуации следующим образом.
1) Создаю на странице скрытый div, и использую его для хранения временных элементов, которыми и является разметка диалога(ов).
2) Сами диалоги именую по следующему правилу:
Пример:
а) Диалоги для вывода информации 1
<div class="info1" id="d2" title="2й диалог для вывода информации 1"></div>
<div class="info2" id="d1" title="1й диалог для вывода информации 2"></div>
б) Диалоги для вывода информации 2
<div class="info2" id="d2" title="2й диалог для вывода информации 2"></div>
3) Далее после использования диалога (оговорюсь что у меня нет статических диалогов, все строятся после успешного выполнения ajax), я его «разрушаю» и «удаляю разметку».
———————————————–
Пример: Разрушение диалога и удаление его разметки после использования.
$(function(){
//2) Обработчик для создания разметки диалога,
// инициализации и показа
$(‘#create_dialog’).click(function(){
$(‘.server’).append(‘Меня не было в DOM во время загрузки, меня создали кликом!’);
var dialogSel = ‘.info1#d1′;
init_simpleDialog(dialogSel);
//Тут можно добавить диалогу кнопки и прочие настройки используя метод option
$(dialogSel).dialog(’open’); //Ну и показали диалог
//который при close будет уничтожен, тем самым
//экономя безценные кбайты ОЗУ
});
//1) Функция инициализации диалога
function init_simpleDialog(dialogSelector)
{
var s_dialog = $(’dialogSelector’);
s_dialog.dialog({
autoOpen: false,
draggable: true,
close: function(event, ui){
s_dialog.dialog(’destroy’); //убили диалог и обработчики и т.п.
s_dialog.remove(); //удалили разметку
}});
}//1) Функция инициализации диалога
});
Обсуждение статьи можно продолжить на форуме jQuery.