IE6 select BUG: Unable to set selected property Unspecified Error

Sorry, this article is not written in English and has not been translated into English yet .You can view this article in English with Google Translate, or please come back later.

.最近在做js选择select的时候,莫名其妙的在IE6中报了一个“无法设置selected属性 未指明的错误”,谷歌和度娘搜了一圈,发现也有不少人遇到同样的bug,给出的解决方案,几乎都是增加一个setTimeout:

setTimeout(function(){
  selectObj.val(defaultSelect);//选中指定项
},0);

细测下来发现一个很奇特的现象,在js抛出错误之前,其实已经完成了选择。抛出错误之后,js代码随即停止运行。 用上述方案之后,虽然后续的js可以执行,但用setTimeout“延迟执行”,虽然解决了问题,但是看起来却感觉有点“不靠谱”。 既然是选择完成之后抛出错误,并不影响当前的选择,那么可不可以用try catch语句来捕捉错误呢?于是尝试用下面的方法:

try {
  selectMonth.val(oldMonth);//选择指定项目
} catch (e) {
}

发现真的可以执行了,但是继续测试下去,发现这种try...catch只能针对3个以下(我测出来的是3可能会有不同)连续选择有效。大于这个数目还是需要用到setTimeout的如下:

//连续3次选择年、月、日的实验
try {
  selectYear.val(oldYear);//第一次选择年,可以用try catch来捕捉错误。
} catch (e) {
}

try {
    selectMonth.val(oldMonth);//连续第二次选择,仍然可以用该方法。
} catch (e) {
}
//连续第三次选择,如果直接用tyr catch可能会报错,所以我加上了个setTimeout
setTimeout( function () {
    try {
        selectDate.val(oldDate);
     } catch (e) {
    }
 }, 0 );

总结:个人觉得处理这个问题的时候用try catch会比单纯的setTimeout要好一点,但是究竟这个错误是什么原因引起的,还有待考虑,个人猜测好像是select里面的option加载会有一点点延迟,有点像异步的感觉,最终导致了上述的bug产生。当然,如果有哪位高人知道其中的“真谛”也请不吝赐教。

278270
  • logo
    • HI, THERE!I AM MOFEI

      (C) 2010-2024 Code & Design by Mofei

      Powered by Dufing (2010-2020) & Express

      IPC证:沪ICP备2022019571号-1