在 IE8 中接收无效参数

Receiving Invalid Argument in IE8

本文关键字:无效 参数 IE8      更新时间:2023-09-26

我已经盯着这个几个小时了,真的需要一些帮助。我正在为电影院网站使用一些现有代码,以下内容应该填充一个选择列表,其中包含从今天到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不显示带有日期的下拉列表,并且显示无效参数与try的右括号相同。

任何帮助将不胜感激!

我不知道

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 方法的 DOM 2 HTML 规范中,它说:

此方法等效于节点的 appendChild 方法。 接口(如果 before 参数为空)。

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

从我能找到的文档中,使用 null 参数没有任何意义。但是,很明显,不同浏览器中的 JavaScript 引擎处理此方法的方式不同,并且 IE 不喜欢将null作为第二个参数。

所以,按照口头禅,你应该使用jQuery。它很好,做所有事情。它实际上确实有助于保护您免受 DOM 浏览器实现之间的差异,因为它具有相当广泛的兼容性。 无论如何,它解决了这家伙的问题。

您可能希望使用append()而不是add()。例如:

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

还有另一种方法可以在选择中添加新选项,即

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

适用于所有 mejor 浏览器的示例

尝试使用

elSel.options.add(elOptNew)

这必须在所有浏览器中工作。请参阅示例