«Убираем за собой» или уничтожение обьектов в JavaScript
Сегодня столкнулся с тем что когда работаешь с JavaScript иногда приходится «подчищать» за собой. Например: подгружаем при помощи AJAX некий html в котором в есть в свою очередь код на JavaScript.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
jQuery("#list2").jqGrid('navButtonAdd','#pager2',{caption:"Отредактировать", onClickButton:function(){ var gsr = jQuery("#list2").jqGrid('getGridParam','selrow'); if(gsr){ //$("#pg_add_edit" ).dialog( "destroy" ); $("#pg_add_edit").dialog({autoOpen: false,height: 600,width: 800,modal:true,title: "Редактирование новости" }); $("#pg_add_edit" ).dialog( "open" ); $("#pg_add_edit").load("client/view/news/news.php?step=edit&id="+gsr); } else { alert("Сначала выберите строку!") } } }); |
Вот подгружаемый код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<script type="text/javascript" src="js/tinymce/tinymce.min.js"></script> <div id="messenger"></div> <form ENCTYPE="multipart/form-data" action="?content_page=news&step=<?php echo "$step&newsid=$id"; ?>" method="post" name="form1" target="_self"> <input name=dtpost id=dtpost value="<?php echo "$dtpost"; ?>"><br> <input name=title id=title value="<?php echo "$title";?>" class="span8" placeholder="Заголовок"><br> <textarea class="span12" name=txt rows="15" placeholder="Введите новость"> <?php echo "$txt";?> </textarea> </form> <script> $( "#pg_add_edit" ).dialog({ close: function() {$( "#dtpost" ).datepicker( "destroy" ); tinymce.activeEditor.destroy(); } }); $("#dtpost").datepicker(); $("#dtpost").datepicker( "option", "dateFormat", "dd.mm.yy"); <?php if ($step!='edit'){?> $("#dtpost").datepicker( "setDate" , "0"); <?php } else {?> $("#dtpost").datepicker( "setDate" , "<?php echo "$dtpost"; ?>"); <?php };?> tinymce.init({selector:'textarea'}); </script> |
Т.е. чтоб не плодить datepicker и редакторы tinymce каждый раз, как будет нажата кнопка «отредактировать», отлавливаем закрытие диалогового окна. После закрытия — уничтожаем объекты datepicker и редакторы tinymce. Т.е. если не уничтожите, может ничего страшного и не случится. Но потенциальная утечка памяти. Открыл-закрыл 10 раз — ушло 10 мегабайт.
Обычно я тоже не особо обращал внимание на такие мелочи, ибо не слишком часто сталкиваешься с ситуацией, что какой то объект на странице нуждается в создании много раз.