在IE8中接收无效参数

时间:2012-08-17 06:15:14

标签: javascript internet-explorer-8

我一直盯着这几个小时,可以真正使用一些帮助。我正在使用电影院网站的一些现有代码,以下内容应填写一个选择列表,其日期范围从今天到xml文件的最大日期。

function populateSelect(xmlDoc, elSel) {
    var dmindate = new Date();
    var showings = xmlDoc.getElementsByTagName('Session');
    fmaxdate = "";
    for (var showing = 0; showing < showings.length; showing++) {
        if (retText(showings[showing].getElementsByTagName('Date_time')[0]) > fmaxdate) {
            fmaxdate=retText(showings[showing].getElementsByTagName('Date_time')[0]);//get the Max Date
        }
    }

    var dmaxdate = new Date.parseString(fmaxdate, "yyyyMMddHHmmss");
    while(dmindate <= dmaxdate){ //Fill in the Select List
        var elOptNew = document.createElement('option');
        elOptNew.text = dmindate.format("EE NNN d, yyyy");
        elOptNew.value = dmindate.format("MM/dd/yyyy");
        dmindate.setDate(dmindate.getDate()+1);
        try {
            elSel.add(elOptNew, null); // standards compliant doesn't work in IE
        }
        catch(ex) {
            elSel.add(elOptNew); // IE only
        }
    }
}

这在FF,Chrome和Safari中完全正常,但IE8不会显示日期下拉列表,并且显示无效参数与尝试的结束括号相同。

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

我不知道Date.prototype.parseStringformat方法的来源,可能是您添加了一些日期库。它们不是ECMAScript ed 3或5的一部分。

您可以替换这些行:

> var elOptNew = document.createElement('option'); 
> elOptNew.text =dmindate.format("EE NNN d, yyyy");
> elOptNew.value = dmindate.format("MM/dd/yyyy");

使用:

var elOptNew = new Option(dmindate.format("EE NNN d, yyyy"), // option text
                          dmindate.format("MM/dd/yyyy"));    // option value

然后将其添加到选择:

elSel.appendChild(elOptNew);

以上内容适用于所有版本的IE和其他浏览器。有关Option构造函数的详细信息,请参阅http://dev.w3.org/html5/spec/single-page.html#the-option-element

修改

add method的DOM 2 HTML规范中,它说:

  

此方法相当于Node的appendChild方法   如果before参数为null,则为interface。

这并不意味着传递ECMAScript null对象,它意味着“如果没有第二个参数”。规范是语言中立的,它不是特定于JavaScript的。 HTML5 OptionsCollection add method是相同的(即“null”表示没有参数,不是javascript null对象)。

答案 1 :(得分:0)

documentation I could find开始,具有空参数并没有任何意义。但是,很明显,不同浏览器中的JavaScript引擎以不同方式处理此方法,并且IE不喜欢null作为第二个参数。

所以,根据口头禅,you should use jQuery. It is good and does all things.它确实有助于保护您免受DOM的浏览器实现之间的差异,因为它具有fairly broad compatibility。无论如何它修复了this guy's issue

您可能希望使用append()代替add()。例如:

var elOptNew = $('<option></option>');
...
elSel.append(elOptNew); 

答案 2 :(得分:0)

尝试使用

elSel.options.add(elOptNew)

这必须适用于所有浏览器。 See example

答案 3 :(得分:0)

还有一种方法可以将新选项添加​​到选择中,即

var opts = elSel.options;
opts[opts.length] = new Option(dmindate.format("EE NNN d, yyyy"), dmindate.format("MM/dd/yyyy"));

Example that works in all mejor browsers