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});解决!

原文地址:https://www.cnblogs.com/aigeileshei/p/9233994.html