dialog销毁不干净与弹出多个dialog问题
1、关闭dialog的时候不销毁。重新打开然后影响页面的效果与样式。
原因:
dialog的close()只是将html片段隐藏,并没有销毁移除。
解决方式:
打开dialog的时候在写onClose回调处理:
onClose:function(){
$(this).dialog('destory').remove();
}
需要注意:
如果你的dialog的div是定义在html当中,当你关闭一次dialog之后会发现dialog打不开了,这是因为你的dialog已经被销毁了。所以应该在创建dialog的时候使用克隆体或者在创建的时候新建div。如:
$('<div></div>').dialog({
id: 'newDialog',
href: "xxx",
onClose:function(){
$(this).dialog('destory').remove();
}
});
2、$.delegate绑定事件导致冒泡生成dialog的问题。
使用上面的方式解决了一个页面的多个dialog的影响,但是另一个页面同样方式还是多个页面出现,影响。于是调试。
定位问题出现在生成dialog代码执行了多次。代码如下:
$.delegate('#addDialogBtn', ''click', function(){
$('<div></div>').dialog({
id: 'newDialog',
...
});
})
通过js中弹出$("#addDialogBtn").size()为0,且在click中弹出次数为2判断出是click事件走了两次,但是不是因为多个页面的原因。
定位到问题只会是出现在delegate方法。于是进行对应的查找
delegate有一个类似于预定的作用,但是delegate如果是在子页面中使用的话会产生冒泡事件,也就是出发后在子页面中执行一次,父页面中又执行一次。
于是将delegate换成普通的$('#xx').click(function(){xxx});解决!