当前位置: 代码迷 >> Web前端 >> Jquery dialog( 'destroy' ) 后再有缓存 (转)
  详细解决方案

Jquery dialog( 'destroy' ) 后再有缓存 (转)

热度:1210   发布时间:2013-07-16 22:38:04.0
Jquery dialog( 'destroy' ) 后还有缓存 (转)
使用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中发现的问题,在其他版本中是否还有尚未测试。


以上是我的解决方法,参考自http://forum.jquery.com/topic/dialog-will-move-its-div-tag-to-body


实现方式还可以优化,而且网上还有一些直接改了dialog的内核的方法可以参考。



  相关解决方案