2

以下 js 在 FF2 中可以正常工作,但在 IE6 中,下拉菜单总是选择一个选项来提早,IE -> testix2 vs. FF2 -> testix3 如果我们在脚本中的某处添加一个 alertBox,它在 IE6 中也可以正常工作。但是如何在没有 alertBox 的情况下解决这个问题?

蒂亚

<script language="JavaScript" type="text/javascript">
<!--
function Entry(value, name, selected) {
    this.value = value;
    this.name = name;
    this.selected = selected;
}


//-->
</script>
        <select id="selSeaShells">

        </select>
<script language="JavaScript" type="text/javascript">
<!--
var productCategoryLevel2 = new Array();

productCategoryLevel2.push(new Entry('Hallo1', 'testix1', false));
productCategoryLevel2.push(new Entry('Hallo2', 'testix2', false));
productCategoryLevel2.push(new Entry('Hallo3', 'testix3', true));

    var i = 0;
        for (i in productCategoryLevel2) {
        var optL2 = document.createElement('option');
        optL2.selected = true;

                optL2.text = productCategoryLevel2[i].name;
        optL2.value = productCategoryLevel2[i].value;
        if (productCategoryLevel2[i].selected == true) {
            productCategoryLevel2[i].selected = true;
            optL2.selected = true;
        } else {
            optL2.selected = false;     
        }
                try {
            document.getElementById("selSeaShells").add(optL2, null);
                } catch(ex3) {
            document.getElementById("selSeaShells").add(optL2);
                }
        }
//-->
</script>
4

3 回答 3

3

我不完全确定为什么您的示例不起作用,但是如果您这样做(即在 <select> 上设置 selectedIndex 而不是设置 <option> 的 selected 属性),它会起作用。测试过FF3、IE6、Chrome。

var i = 0;
for (i in productCategoryLevel2) {
    var optL2 = document.createElement('option');

    optL2.text = productCategoryLevel2[i].name;
    optL2.value = productCategoryLevel2[i].value;
    try {
        document.getElementById("selSeaShells").add(optL2, null);
    } catch(ex3) {
            document.getElementById("selSeaShells").add(optL2);
    }

    if (productCategoryLevel2[i].selected == true) {
            document.getElementById("selSeaShells").selectedIndex = i;
    }      
}
于 2008-12-22T12:18:57.817 回答
0

我现在无法对此进行测试,但您可能希望使用标准 for(;;) 循环而不是 for..in 结构来迭代您的数组,该结构只能用于 javascript 中的对象。

于 2008-12-22T12:31:59.943 回答
0

这感觉就像一个 IE 错误(我想知道将 true 转换为 1 是否有问题),但是您已经通过将选择索引基于选项而不是 tomhaigh 修复的选择本身来实现它。

重要的是要意识到,如果您从零选项开始,那么您想为选择的第一个选项提供什么值并不重要 - 作为一组元素中的一个元素,它只能被选中=true。

(我也同意三联画for

于 2008-12-22T12:44:30.527 回答