Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.10.2011, 21:20
Интересующийся
Отправить личное сообщение для Одессит Посмотреть профиль Найти все сообщения от Одессит
 
Регистрация: 04.07.2011
Сообщений: 11

Повторное открытие окна в overlay tools
Взял для открытия всплывающих окон эту jquerную библиотеку - http://flowplayer.org/tools/demos/ov...al-dialog.html
Подключил к коду, открывается по получению запроса ajax по нажатию кнопки, один раз - отлично, нажимаю второй раз - ничего
Вот тестовую сделал страницу
http://nadlanbid.com/oleksiy/test
в консоле вывожу объект, что возвращается, так в двух ситуациях разное почему-то. Как исправить и почему такое происходит?
$(document).ready(function() {
	$("#update_details").click ( function()  {
		
		var fields =$(this.form).serializeArray();
		$.post("pers_det/update_details", fields,
		function(data) {
			if (data.success)
			{
				$("#sys_mes_short_text").html(data.success);
				var v = $("#sys_mes_short").overlay({
					closeOnClick: false,
					load: true
					});
				console.log(v);
				console.log($("#sys_mes_short"));
			}
		}, "json");
	} );
	
});


Лог
POST http://nadlanbid.com/oleksiy/pers_det/update_details
[div#sys_mes_short]
[div#sys_mes_short]

POST http://nadlanbid.com/oleksiy/pers_det/update_details
d { load=function(), close=function(), getOverlay=function(), ещё...}
[div#sys_mes_short]

Последний раз редактировалось Одессит, 11.10.2011 в 21:25.
Ответить с цитированием
  #2 (permalink)  
Старый 11.10.2011, 21:28
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Он просто скрывается, поищите в доках как его показать. Может прокати просто так $("#sys_mes_short").show()
Ответить с цитированием
  #3 (permalink)  
Старый 11.10.2011, 21:42
Интересующийся
Отправить личное сообщение для Одессит Посмотреть профиль Найти все сообщения от Одессит
 
Регистрация: 04.07.2011
Сообщений: 11

Сообщение от zebra Посмотреть сообщение
Он просто скрывается, поищите в доках как его показать. Может прокати просто так $("#sys_mes_short").show()
Ну, это я знаю, в данной ситуации оно подойдет, но у меня есть задачи, где чуть посложнее, и функция overlay упростит сильно работу.
Мне просто интересно кто сталкивался с такой библиотекой и в чем может быть проблема. У них на сайте все работает отлично, открывается сколько хочешь раз, при этом никаких особых параметров я не вижу.
Ответить с цитированием
  #4 (permalink)  
Старый 11.10.2011, 22:32
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Давайте посмотрим на простейший вариант использования из документации.
<!-- СОЗДАЁМ ТРИГЕРЫ ПРИ ЩЕЛЧКЕ ПО НИМ ПОЯВЛЯЕТСЯ ОВЕРЛЕЙ. При этом в тригере есть атрибут rel. -->
<div id="triggers">
	<img src="http://farm4.static.flickr.com/3651/3445879840_7ca4b491e9_m.jpg" rel="#mies1"/>
	<img src="http://farm4.static.flickr.com/3346/3449388113_71a06b8548_m.jpg" rel="#mies2"/>
</div>

<!-- Содержимое диалога находится в отдельном div
на содержимое ссылается атрибут  rel в тригере.
 -->
<div class="simple_overlay" id="mies1">
    Содержимое диалога.
</div>


<script>
// код вешает оверлей на тригер, при срабатывании тригера в оверлей будет вставлено содержимое из rel

$(document).ready(function() {
      $("img[rel]").overlay();
});
</script>

Здесь оаерлей создаётся только однажды, и сам отвечает за свой вызов.
А вы для каждого отображения пытаетесь создать свой оверлей. Улавливаете разницу ?

как варианты решения.

1) Путь Мудреца. наиболее правильный

а) повесить оверлей на кнопку, $("#update_details[rel]").overlay();
б) селектор элемента с содержимы оверлея указать в rel, <button rel="#myDialog" id="myButton">
в) post запрос делать внутри обработчика события оверлея onBeforeLoad(более удобное событие до
отрисовки оверлея), или onLoad (уже после того как оверлей на экране),
г) ответ на запрос, грузить в элемент указанный в rel, или в специальный контейнер (думаю это удачнее)
var wrap = this.getOverlay().find(".contentWrap");
wrap.html(data.success);

д) сам HTML оверлея
<div class="apple_overlay" id="myDialog">

	     <!-- the external content is loaded inside this tag -->
   	     <div class="contentWrap"></div>
      </div>


2) Путь камикадзе.

Каким то образом подчистить следы предыдущего оверлея перед созданием нового.
например при помощи $("#sys_mes_short").remove() - но я не могу гарантировать отсутствие утечек памяти, штатные
методы ликвидации увы отсутствуют.

Да прибудет с тобой сила !
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 11.10.2011 в 23:36.
Ответить с цитированием
  #5 (permalink)  
Старый 11.10.2011, 23:36
Интересующийся
Отправить личное сообщение для Одессит Посмотреть профиль Найти все сообщения от Одессит
 
Регистрация: 04.07.2011
Сообщений: 11

Так, разницу понял, а вот совет недоконца.
у меня есть два разных окна, одно с id="sys_mes_short" для успеха и id="err_mes" для ошибки.
Вот мне не понятно как в такой ситуации решать какое окно показывать?
В data.success у меня возвращается не само окно, а лишь текст, который нужно прописать. Если data.error вернулось, то показываем другое окно с другим текстом. Вот как в такой ситуации это сделать лучше?
Ответить с цитированием
  #6 (permalink)  
Старый 11.10.2011, 23:43
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Я боюсь это не совет а единственная возможность, методов вроде open я не нашёл в документации )))

Собственно вот похожее демо. Исходники можно посмотреть при помощи нехитрых манипуляций с правой кнопкой.
http://flowplayer.org/tools/demos/overlay/external.htm

И окно у тебя на самом деле одно, а вот содержимое разное.

Если всё хорошо ты делаешьwrap.html(data.success);
Если всё плохо ты делаешь wrap.html("Ну вот. Операция неудалась, нам с тобой крышка");
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 11.10.2011 в 23:56.
Ответить с цитированием
  #7 (permalink)  
Старый 12.10.2011, 01:34
Интересующийся
Отправить личное сообщение для Одессит Посмотреть профиль Найти все сообщения от Одессит
 
Регистрация: 04.07.2011
Сообщений: 11

Не, для ошибки оно красное, это другой див с другими классами, просто я его в тесте не использовал, так как думал что достаточно сделать с одним, а на второе оно и так распространиться
Ответить с цитированием
  #8 (permalink)  
Старый 12.10.2011, 21:40
Интересующийся
Отправить личное сообщение для Одессит Посмотреть профиль Найти все сообщения от Одессит
 
Регистрация: 04.07.2011
Сообщений: 11

Короче вот теперь какая проблема.
Сделал как предложили, подгружаю окно в
<div id="popup" style="display:none">
<a class="close"></a>
<div class="contentWrap"></div>
</div>

использую событие onBeforeLoad, однако оверлей запускается до возврата ajax запроса. Что приводит к тому, что если возникает ошибка, то выводиться кнопка закрытия которую я повесил на close. Как-то можно по другому запускать?
Ответить с цитированием
  #9 (permalink)  
Старый 12.10.2011, 22:21
Интересующийся
Отправить личное сообщение для Одессит Посмотреть профиль Найти все сообщения от Одессит
 
Регистрация: 04.07.2011
Сообщений: 11

Фух, вроде разобрался, есть событие load
короче создал hidden элемент, прописал в него rel
повесил на него оверлей
Код оставил старый, то есть отправка аякс запроса по клику, только теперь в месте показа вызываю функцию load() оверлея

Последний раз редактировалось Одессит, 12.10.2011 в 22:23.
Ответить с цитированием
  #10 (permalink)  
Старый 12.10.2011, 22:23
Интересующийся
Отправить личное сообщение для Одессит Посмотреть профиль Найти все сообщения от Одессит
 
Регистрация: 04.07.2011
Сообщений: 11

Да, есть правда вопрос ещё, как затемнение делать?
Использую
$("#overlay[rel]").overlay({
		mask: {
			color: '#000',
			loadSpeed: 200,
			opacity: 0.9
		}
	});


Результат нулевой, в примерах вроде так же все делается ничего дополнительного нет... Может кто подскажет?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное открытие окна. Flashton Элементы интерфейса 3 20.10.2010 16:00
Открытие модального окна из фрейма lukingnu jQuery 5 30.08.2010 18:30
Открытие нового окна без скролбаров без верхнего бара "файл правка вид и тп" Mara Общие вопросы Javascript 2 18.02.2010 15:11
Медленное открытие окна m00 Общие вопросы Javascript 2 02.02.2010 08:23
открытие нового окна javascript subaru Элементы интерфейса 2 14.05.2008 20:22