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

0 javascript jquery internet-explorer

嗨,我在IE中收到此错误.它适用于所有其他浏览器.

这是错误显示的行:

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

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

<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />
Run Code Online (Sandbox Code Playgroud)

但它对我不起作用.

Spu*_*ley 7

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

简短的回答是.indexOfIE8或更早版本不支持数组.(这包括兼容模式下的IE版本,因此您的元标记将意味着它将无法在任何IE版本中工作)

解决方案:

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

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

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

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

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

    如果您乐意使用库但未安装可能有帮助的库,请使用此解决方案.

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

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

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

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

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

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