SCRIPT5007:无法获取属性'indexOf'的值:对象在IE中为null或未定义

时间:2013-05-28 08:52:38

标签: javascript jquery internet-explorer

您好我在IE中遇到此错误。它适用于所有其他浏览器。

这是错误显示的行:

if (parseFloat(totalnumm.replace(/[^0-9-.]/g,'')) > compare_value_neww    &&  values[x].indexOf("Custom") > -1 ).

我用Google搜索并找到了一个解决方案:

<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />

但它对我不起作用。

1 个答案:

答案 0 :(得分:7)

我打算问你正在测试这个版本的IE,但是因为你在meta标签中指定了content="IE=8,这是相当无关紧要的。

简短的回答是,IE8或更早版本不支持.indexOf数组。 (其中包括兼容模式下的IE版本,因此您的元标记将意味着它不适用于任何IE版本)

解决方案:

  1. 使用类似jQuery(或类似)的库,它提供了一种.inArray()方法,您可以使用它。

    然后,您需要将代码从使用var.indexOf(x)更改为$.inArray(var,x)

    如果您已经在使用jQuery(或具有此功能的其他库),请选择此解决方案。

  2. 使用像this one这样的polyfill库,将标准.indexOf方法添加到Array原型中。

    这应该允许您保持现有代码不变;只包括图书馆。

    如果您乐意使用图书馆,但尚未安装可能有帮助的图书馆,请使用此解决方案。

  3. 使用for()循环编写自己的功能,执行相同的工作。

    这是您在数组中查找内容的完全变化,但这意味着您不需要使用任何额外的库。

    如果您不想(或不能以任何理由)使用第三方库,请使用此解决方案。

  4. 删除您的IE8元标记(无论如何都非常糟糕,所以这是一个好主意)并且仅为IE9或更高版本的用户支持您的网站。

    如果您愿意停止支持旧的IE版本,请使用此解决方案。

    事实上,无论如何都要这样做是个好主意;没有充分的理由使用元标记强制IE进入兼容模式。最好将其设置为content="IE=edge"。这将完全消除新IE版本的问题。如果您确实需要支持IE8或更早版本,那么此解决方案将无法解决问题,您还需要使用上述其他解决方案之一,但无论如何我仍然建议您这样做,因为事实上你是故意从新的IE版本中删除功能。