Как победить кэширование в диалоге ?
Подскажите пожалуйста, может кто сталкивался с такой проблемой. (Я точно не знаю кэширование это или что другое но...)
Есть диалоговое окно (виджет 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 продолжает наращиваться? Где может происходить кэширование? |
Сталкивался с такой проблемой, делайте так при закрытии:
$("#dialog").dialog('destroy').remove(); должно сработать. То есть тут происходит удаление DOM элемента. Если это не сработает, то посмотрите через любой DOM-инспектор (Firebug), что там надо почистить. |
Сделал как Вы посоветовали $("#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(); }); |
Если честно не до конца понял всю логику работы вашего скрипта.
Попробуете сделать так: 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, время: 14:43. |