请在ie6下打开:ie6_js_hidden_select_bug.html
通过:
document.getElementById('J_Test').style.display = 'none';
可以隐藏select元素。
但是通过:
document.body.id = 'page';
配合css代码:
#page select { display: none; }
在ie6下,无法隐藏select元素。
尝试position, setTimeout, 改变zoom到1.001等方法,均失败。
想起ie6下,臭名昭著的select需要用iframe遮罩的bug,估计和上面的bug根由是一样的:在ie6下,select是windowed element,其表现和普通的HTML elements有本质上的区别。至于究竟为何?估计只能去看微软的源码了。
总结:
之前也发现过一些类似的问题,当时没有仔细研究过,后来还发现一次问题是select自动隐藏的问题,通过reflow解决了,这个问题明显使用一般reflow的方式是不行的(除非通过在隐藏后通过document.body.innerHTML+=”的方法让页面css重新渲染html)。
测试发现:
1、通过class的方式是可以隐藏的,但是通过id的方式是不能隐藏的。
2、在IE7下,如果某个select或者其父节点(包括body除外的更高层级的祖先节点)如果定义了position:relative,那么也会出现和IE6一样的问题。
在IE8及其他浏览器没有这两个问题。