Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как победить кэширование в диалоге ? (https://javascript.ru/forum/jquery/6899-kak-pobedit-kehshirovanie-v-dialoge.html)

xela1980 03.01.2010 15:03

Как победить кэширование в диалоге ?
 
Подскажите пожалуйста, может кто сталкивался с такой проблемой. (Я точно не знаю кэширование это или что другое но...)
Есть диалоговое окно (виджет 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 продолжает наращиваться? Где может происходить кэширование?

Michael83 05.01.2010 04:23

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

должно сработать. То есть тут происходит удаление DOM элемента.
Если это не сработает, то посмотрите через любой DOM-инспектор (Firebug), что там надо почистить.

xela1980 05.01.2010 23:20

Сделал как Вы посоветовали $("#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(); 
 });

Michael83 06.01.2010 13:46

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

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


Часовой пояс GMT +3, время: 05:44.