Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.01.2010, 14:03
Аспирант
Отправить личное сообщение для xela1980 Посмотреть профиль Найти все сообщения от xela1980
 
Регистрация: 20.11.2009
Сообщений: 33

Как победить кэширование в диалоге ?
Подскажите пожалуйста, может кто сталкивался с такой проблемой. (Я точно не знаю кэширование это или что другое но...)
Есть диалоговое окно (виджет UI.Dialog)
В данном окне есть кнопка (open_add_pair_field) при нажатии на которую в данное диалоговое окно аяксом вставляется контент.
$(".open_add_pair_field").live("click",function() {
$.ajax({ 
           url:  "ajax/add_del_periodtime/add_par_field.php", 
            cache:false,  
            success:function(html) 	{
           $(".add_par_field").html(html);  } }); 
});



Во вставленном контенте есть содержимое и вторая кнопка (close_add_pair_field) при нажатии на которую данный контент скрывается таким образом:
$(".close_add_pair_field").live("click",function() {
alert("Закрываю поле");		
$(".add_par_field").hide(); });


Суть проблемы (распишу подробно)
Вызываю диалог впервый раз. Нажимаю кнопку open_add_pair_field (то есть загрузить контент) - контент загружается. Выполняю нужные мне действия и жму в контенте кнопку close_add_pair_field - контент закрывается и в это время alert("Закрываю поле") выпадает как и положено один раз. Если я затем еще (не закрывая диалоговго окна) буду грузить в него контент и затем закрывать то все работает как нужно и alert("Закрываю поле") валиться при закрытии только единожды.
Но если я ЗАКРЫВАЮ ДИАЛОГОВОЕ ОКНО, затем открываю его, снова гружу в него контент (жму кнопку open_add_pair_field) и пытаюсь закрыть контент то есть жму кнопку close_add_pair_field то alert("Закрываю поле") валиться два раза. Если закрою диалог и открою еще раз затем повторю действия с загрузкой и закрытием контента то alert("Закрываю поле") валиться три раза. И т.д. Пока полностью не перегружу страницу в браузере alert продолжает наращиваться и функционал контента тоже работает неправильно все время используются значения полученные в результате загрузки контента при первом открытии диалога,
Диалог при закрытии дестроится таким образом

close: function(event, ui) {
$("#dialog").dialog('destroy');
}
То есть весь функционал диалога согласно мануалу уничтожается, Подозреваю что проблема может быть в том что я скрываю поле то есть делаю так $(".add_par_field").hide();
Но я пытался его и заменять и удалять при закрытии но все равно alert продолжает наращиваться? Где может происходить кэширование?
Ответить с цитированием
  #2 (permalink)  
Старый 05.01.2010, 03:23
Интересующийся
Отправить личное сообщение для Michael83 Посмотреть профиль Найти все сообщения от Michael83
 
Регистрация: 05.01.2010
Сообщений: 28

Сталкивался с такой проблемой, делайте так при закрытии:
$("#dialog").dialog('destroy').remove();

должно сработать. То есть тут происходит удаление DOM элемента.
Если это не сработает, то посмотрите через любой DOM-инспектор (Firebug), что там надо почистить.
Ответить с цитированием
  #3 (permalink)  
Старый 05.01.2010, 22:20
Аспирант
Отправить личное сообщение для xela1980 Посмотреть профиль Найти все сообщения от xela1980
 
Регистрация: 20.11.2009
Сообщений: 33

Сделал как Вы посоветовали $("#dialog").dialog('destroy').remove(); Но теперь после того как закрываю диалог второй раз он вообще не вызывается. Я так понимаю убивается ("#dialog") в DOM после закрытия А как же восстановить его для повторного открытия диалога? Код такой

$("#dialog").dialog(
 { 
 position: ["left","top"],
 title:"Запись новой пары",
 hide: "slide",show:"slide",height:400,width:700, 
 zIndex:999,
 open: function(event, ui) {
 $.ajax({
  
 url:"ajax/stationary/insert_pair.php",
 data:stqstring,
 cache: false, 
 success: function(html)
 { $("#insert_pair").html(html);                         
   
 }
 });    
 },  
 close: function(event, ui) {
           
 $("#dialog").dialog('destroy').remove();
     
 }
 }).dialog("open");


ТО что возвращается в #insert_pair

 $(".open_add_pair_field").live("click",ADD_PAIRS_FIELD);
 $(".close_add_pair_field").live("click",function() 
 {
  
 alert("Закрываю поле");
 $(".add_par_field").hide(); 
 });
Ответить с цитированием
  #4 (permalink)  
Старый 06.01.2010, 12:46
Интересующийся
Отправить личное сообщение для Michael83 Посмотреть профиль Найти все сообщения от Michael83
 
Регистрация: 05.01.2010
Сообщений: 28

Если честно не до конца понял всю логику работы вашего скрипта.
Попробуете сделать так:
var dlg = $("#dialog").clone().attr('id', 'dialog_clone');
dlg.dialog({ 
  position: ["left","top"],
  title:"Запись новой пары",
  // дальше ваш код без изменений
  close: function(event, ui) {
    dlg.dialog('destroy').remove();
  }
  // дальше ваш код без изменений

то есть вы создаете копию элемента и далее по коду везде где использовали $(#dialog) используйте его копию dlg

Последний раз редактировалось Michael83, 06.01.2010 в 12:49.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 19:24
UI Dialog как победить двойной вызов??? xela1980 jQuery 3 19.12.2009 10:51
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 22:20
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 22:24
форма как в ExtJS 2 magistr_bender Общие вопросы Javascript 0 11.09.2008 15:01