3

我正在生成一个“选择”元素,然后用选项填充它并将其插入到我页面的 DOM 中。在 FF、Chrome、Chromium 等中一切都很好,但在 IE 中,下拉列表中没有选项显示,但光标下显示突出显示,当我单击空白列表时,事件处理程序被触发并正确处理。这是相关的 HTML 区域:

<span id="spn_fyear" style="position:absolute; top:7px; left:200px; height:24px; cursor:pointer; color:#000000;" onclick="spn_fyear_onclick(this)">
   <span id="spn_fyearno" style="position:absolute; top:0px; font:italic bold 17px sans-serif; color:#FFFEF2;"><?=$thisPage->getVar('start_year')?></span>
</span>

这是有问题的javascript:

function spn_fyear_onclick(_obj)
{
    //make start year list
    var lstto = document.getElementById('lst_year');
    var topts = new Array();
    var nopt = null;
    for(i=0; i<lstto.options.length; i++)
    {
        topts[i] = lstto.options[i].text;
    }
    var lstf = document.createElement('SELECT');
    lstf.id = "lst_fyear";
    lstf.style.position = "absolute";
    lstf.style.top = "-3px";
    lstf.style.left = "1px";
    lstf.style.fontFamily = "sans-serif";
    lstf.style.fontWeight = "normal";
    lstf.style.fontSize = "12px ";
    lstf.style.width = "55px";
    lstf.style.color = "#000000";
    lstf.style.display = "inline";
    lstf.onchange = lst_fyear_onchange;
    for(i = 0; i < topts.length; i++)
    {
        if(topts[i] != 'undefined')
        {
        nopt = document.createElement('OPTION');
        nopt.text = topts[i];
        nopt.value = topts[i];
        lstf.appendChild(nopt);
        }
    }
    document.getElementById('spn_fyear').appendChild(lstf);
}

在这一行中:var lstto = document.getElementById('lst_year') 我正在创建对现有选择对象的引用,我从中复制选项数据。lst_year 在页面首次加载时由 php 数据库查询填充。我绝望地创建了数组 ( var topts = new Array()),以防 IE 有一个复制属性和属性但无济于事的怪癖。就像我说的 - 在 Linux 和 Windoze 中的 FF 或 Chrome 中,一切都像梦一样工作,但与 IE 混为一谈。我已经搜索了 MSDN 等一些晦涩的行为,但我很难过。任何建议将不胜感激:) 亲切的问候,仁

4

1 回答 1

2

很可能,您的问题在这里:

    nopt = document.createElement('OPTION');

试试这里提到的这个方法:

JavaScript:在 new Option() 之后添加额外的属性

(在我开始使用构造函数<option>之前,我在元素和 IE方面遇到了很多问题。new Option

于 2013-01-29T21:08:22.337 回答