2013-05-28 31 views
0

您好,我在IE中遇到了这个错误。它适用于所有其他浏览器。SCRIPT5007:无法获取属性'indexOf'的值:对象在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" /> 

但它没有为我工作。

+3

这不是足够的代码 - “值”是有问题的项目,我们不知道'值'是什么或它是如何构建的。 – SpaceBison

+0

雅,是值[x]返回一个字符串或数组或什么? –

+0

是它的返回数组 – honey

回答

7

我打算问你在测试这个版本的IE版本,但是因为你已经在你的meta标签中指定了content="IE=8,所以这是毫不相关的。

简而言之,IE8或更早版本不支持数组的.indexOf。 (这包括在兼容模式下更高的IE版本,所以你的meta标签将意味着它不会在任何版本的IE工作)

解决方案:

  1. 使用像jQuery(或类似)库它提供了一个可以用来代替的.inArray()方法。

    那么你需要使用var.indexOf(x)改变你的代码,以$.inArray(var,x)

    如果你已经使用jQuery(或具有此功能的其他库)选择这种解决方案。

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

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

    如果您很乐意使用库,但尚未安装可帮助安装的库,请使用此解决方案。

  3. 编写自己的函数,使用for()循环完成相同的工作。

    这是完全改变你在数组中找到东西的方法,但这意味着你不需要使用任何额外的库。

    如果您不想(或不能,无论出于何种原因)使用第三方库,请使用此解决方案。

  4. 删除您的IE8 meta标签(这是很糟糕的,无论如何,所以这是一个好主意),并只支持你的网站与IE9或更好的用户。

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

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

+0

我该怎么做,请帮助...任何1个有效的解决方案? – honey

+0

@honey - 编辑答案,包括使用哪一个提示。 – Spudley

+0

您好Spodely它看起来这可以解决问题。什么请告诉我在哪里我要添加它.. jQuery.inArray(value,array [,fromIndex]) – honey

相关问题