for循环开始时IE中的无效调用对象

时间:2018-09-07 13:56:57

标签: javascript internet-explorer-11 microsoft-edge

我有一个搜索功能,可以从XML列表中获取大约1700个项目,并将通过用户的查询对其进行搜索。除此之外,用户可以通过选择各种过滤器进一步过滤其结果。

它在Chrome浏览器中完美运行,但是在IE中进行测试时,每当我单击过滤器时,都会出现错误“无效的调用对象”,该错误引用了函数sortList()特别是行for(var i=0; i < loadedList.length; i++),如更详细所示下面。

再次,Chrome对此没有任何问题,这完全是IE的问题。在Chrome中设置手表,loadedList是HTMLCollection,可以应用.length方法,但是由于某些原因,在IE中这是行不通的。

此脚本相当长,但我尝试在下面包括相关功能。

因此从概念上将其映射:

    var results = [];
    var loadedList;
    window.onLoad = loadList();

    // actual function 
    function loadList() {

        var items = new XMLHttpRequest();
        items.onreadystatechange = function() {
            //puts all the xml into the loadedList variable
            if (this.readyState == 4 && this.status == 200) {
                var xmlDoc = this.responseXML;
                loadedList = xmlDoc.getElementsByTagName("itm");
                sortList();
            }
        };
        items.open("GET", "item-list-file.xml", true);
        items.send();

    };


    function sortList() {

        for (var i = 0; i < loadedList.length; i++) {

            for (var j = 0; j < loadedList.length; j++) {

                if (boxed[j].checked && boxed[j].id.substr(0, 3) == getElement("category", i).toLowerCase().substring(0, 3)) {

                    // getElement is just a function with a catch statement to handle any missing info on the xml list


                    //pushes any relevant results into results array
                    results.push("<li>" + getElement("title", i) + "</li>");
                }
            }
        }
    }
};

这就是页面加载时发生的要点。有一个search()函数,它只是抓取用户的查询并将其传递给returnSearch()函数。没有任何问题。 当用户搜索一次并想通过选择一个或多个过滤器来缩小搜索范围时,就会出现问题。
有一个updateURL()函数,它会同时更新window.location.href(因此我们可以使用已选择的特定过滤器链接到搜索),然后再次运行sortList()

  function updateURL(searchType) {

    //this resents the results array so that
    results = [];

    //resorts results based on new criteria
    sortList();

   //runs search again so that the filters are applied asynchronously 
    search();


  };

1 个答案:

答案 0 :(得分:0)

从某种原因可以看出,IE不喜欢在@Html.DropDownListFor(model => model.industryId, (IEnumerable<SelectListItem>)ViewBag.Industries, "-Select Industry-") 函数外部声明变量loadedList。我不知道为什么,但是在最初加载项目之后,只要再次调用loadList()loadedList就会出现问题。

我最终删除了函数sortList(),只是将xml放在主体中(而不是在函数中)。

loadList()

仍然不确定IE的问题是什么,但现在可以使用。