Welcome to Jocc's Blog

Jocc@Shanghai

导航

IE中改变div.innerHTML的bug

Posted on 2007-04-12 21:16  Jocc  阅读(3274)  评论(2编辑  收藏  举报
今天碰到一个有关UpdatePanel的bug。

问题描述:
UpdatePanel中包含几个hidden control,每一次postback时该UpdatePanel都会被刷新。
我期望的结果是:UpdatePanel因为包含的都是hidden control,所以无论何种情况它都应该是隐藏的,包括它的height也应该是0.
但是事实是:
1. 当第一次通过get方式打开页面时,UpdatePanel显示正常,height等于0.
2. 当通过post方式patial update该UpdatePanel时,奇怪的事情发生了,页面中UpdatePanel所对应的div的高度不等于0,并且在页面中占了对应的位置。

寻找原因:
一开始以为是自己代码问题,所以反复对比每次patial update到UpdatePanel div的innerHTML中的内容,发现都一样。于是改为怀疑是否是microsoft ajax的问题,把断点设到MicrosoftAjaxWebForms.js中Sys$WebForms$PageRequestManager$_updatePanel方法中去,并跳过改变updatePanelElement.innerHTML的语句。回到页面,div高度没有改变,于是排除别处改变其高度的可能性。

现在的焦点就在于div.innerHTML上了,下面我尝试了两种方式去验证:
1. div.innerHTML = div.innerHTML 内容不改变
2. div.innerHTML = "" 设空
结果每一种都使div的高度不为0。

结论:
网上搜了一下,发现这是一个ie的bug,同样的情况在firefox, Opera, 和Safari 里都不会改变div高度。
另外不止改变innerHTML属性会这样,当增加删除div中child control时都会发生这种情况。

解决办法:
我最后的解决办法是利用div style中display:none来使div真正隐藏。