[function] .apply()在IE中导致“JScript对象预期”错误

时间:2012-06-20 04:46:14

标签: javascript internet-explorer object-expected

以下代码行导致IE中出现“预期的JScript对象”错误:

hideElements.apply(window, elements);

根据IE,“预期的JScript对象”是指hideElements,它是一个将任意数量的HTML对象作为参数并隐藏它们的函数。

具体来说,我通过调用getElementsByTagName来检索HTML对象数组,并且我希望将此数组作为函数hideElements的参数列表传递。 JS函数apply()正是我在这种情况下所需要的。我知道我肯定会以不同的方式编写我的代码,但由于这在Firefox和Chrome上完美运行,并且在技术上是正确的,我真的很想知道为什么IE卡在那里。

我确定,当执行该行时:

  • window不为null且类型为Window;
  • elements不为null且类型为HTMLCollection;和
  • hideElements是一个功能齐全的JS函数(它可以完全独立运行,并且在执行上面的代码时完全加载)。

1 个答案:

答案 0 :(得分:7)

getElementsByTagName返回nodeListapply期望第二个参数为array。如果将elements转换为真实数组(使用循环),它应该可以工作。

注意:在IE< 9中,不可能使用Array.prototype.slice.call(elements),因此循环是创建数组最安全的方法,如:

function nodeList2Array(nodes){
  var arr = [];
  for (var i=1; i<nodes.length;(i+=1)){
    arr.push(nodes[i]);
  }
  return arr;
}

现在:hideElements.apply(window, nodeList2Array(elements));应该有用。