Jquery dialog( 'destroy' ) 後還有快取
阿新 • • 發佈:2019-01-30
使用jQuery的Dialog控制元件時,jQuery會將建立的dialog快取到頁面上,生成一些隱藏的div,當再次建立dialog時,由於id相同總會呼叫快取中的Dialog,導致無法顯示想要顯示的內容。查了dialog有destroy方法,依然沒有作用。
baidu一下恍然,destroy銷燬的jquery ui給你生成dialog時候的那些html,不會銷燬元素本身,要銷燬元素本身要用remove
<script> function Test() { var $dialog = $('<div></div>').dialog({ autoOpen: true, title: '測試內容', buttons: { "關閉": function () { $(this).dialog('close');}, "確定": function () { } }, close: function () { $(this).remove(); }, open: function () { $(this).html('載入你的頁面'); } }); } </script>
補充:上面的方法可以把Dialog徹底清除,但連同Dialog中的DIV也同時清除了,在應用中通常是自建一個Div,通過Div的id繫結Dialog,而jquery會把這個自建的div清除,內容全部放到Dialog的Div中,Dialog的Div預設是建在body中,這對於使用ajax重寫頁面程式碼的應用產生了很多衝突,如果使用上面的方法你的Dialog將只能彈出一次,關閉的時候就會被remove。查了一下替代的解決方法,可以將自建的div先clone,在close時將克隆的div重新append到頁面上。
<script> function Test(divId) { var dialogParent = $(divId).parent(); var dialogOwn = $(divId).clone(); dialogOwn.hide(); var $dialog = $(divId).dialog({ autoOpen: true, title: '測試內容', buttons: { "關閉": function () { $(this).dialog('close');}, "確定": function () { } }, close: function () { dialogOwn.appendTo(dialogParent); $(this).dialog("destroy").remove(); }, open: function () { $(this).html('載入你的頁面'); } }); } </script>
這是在jquery1.8中發現的問題,在其他版本中是否還有尚未測試。
實現方式還可以優化,而且網上還有一些直接改了dialog的核心的方法可以參考。