以下是个人在使用jQuery在开发时,与ie6有关的bug
1:关于select下拉框的动态赋值并选中其中某一项
在ie6中,如果你动态给select赋值并选中时,如下代码:
$('#selectId').empty().html('<option value="001">collonn</option><option value="002">joanna</option>').val('002')
alert('following');
这样写,最终的结果是:
(1)会选中valu='002'的选项,但ie6会报错(浏览器左下角会出现一个黄色报警)
(2)alert('following')这一行是不会执行的,并且,这一行以下的所有js都不会执行
解决方法:
应该这样写:
$('#selectId').empty().html('<option value="001">collonn</option><option value="002">joanna</option>');
setTimeout(function(){
$('#selectId').val('002');
},10);
问题解决,但不知道根本原因,可能是ie6还没有来得及给select做必要的处理吧
2:关于table的显示与隐藏样式
如果隐藏就用:$('#table').css('display','none');
如果显示就用:$('#table').css('display',''); 为空白就行
如果用('display','block'),IE7=6正常,但firefox有问题。
如果用('display','table')或着('display','table-row')或着('display','table-cell'),IE6就会有问题,firefox正常
IE6 Bug之select动态赋值
问题:使用ie测试时发现一处脚本报错,经过alert排查出引发问题的代码。此代码在其他浏览器下正常,但是ie6下报错。
排查:与技术沟通确认代码功能是将select最新服务器设为选中状态。服务器列表是动态生成的。
解决直接上代码:
if ($.browser.msie && ($.browser.version == "6.0") && !$.support.style) { window.setTimeout(function(){//ie6需要稍微延迟 groupSelect.val(max_groupId); }, 0); }else{ groupSelect.val(max_groupId) } |
原因:因为在往select中动态添加option时,浏览器执行javascript设置select的属性的时候浏览器可能还没将它们渲染到页面中(ie6),因此使用setTimeout可以使浏览器渲染线程先将元素渲染到页面中区,再使用javascript线程执行改变它们属性的操作。