IE中动态生成的select / options为空,但在其他浏览器中为OK

时间:2013-01-29 20:33:15

标签: javascript dynamic

我正在生成一个'选择'元素然后用选项填充它并将其插入到我的页面的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等一些不起眼的行为,但我很难过。任何建议将不胜感激 :) 亲切的问候, 仁

1 个答案:

答案 0 :(得分:2)

最有可能的问题是:

    nopt = document.createElement('OPTION');

尝试这里提到的方法:

JavaScript: add extra attribute after new Option()

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