我有一个搜索功能,可以从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();
};
答案 0 :(得分:0)
从某种原因可以看出,IE不喜欢在@Html.DropDownListFor(model => model.industryId, (IEnumerable<SelectListItem>)ViewBag.Industries, "-Select Industry-")
函数外部声明变量loadedList
。我不知道为什么,但是在最初加载项目之后,只要再次调用loadList()
,loadedList
就会出现问题。
我最终删除了函数sortList()
,只是将xml放在主体中(而不是在函数中)。
loadList()
仍然不确定IE的问题是什么,但现在可以使用。