Почему indexOf не работает в Internet Explorer? - PullRequest
6 голосов
/ 13 сентября 2010

Эта функция выполняется во время форм onSubmit и отлично работает в Firefox и Chrome, но не в IE.Я подозреваю, что это indexOf, но я не могу найти способ заставить его работать.

function checkSuburbMatch(e) {

var theSuburb = document.getElementById('suburb').value;
var thePostcode = document.getElementById('postcode').value;

var arrayNeedle = theSuburb + " (" + thePostcode + ")";

if(suburbs.indexOf(arrayNeedle) != -1) {
    alert("Suburb and Postcode match!");
    return false;
} else {
    alert("Suburb and Postcode do not match!");
    return false;
}

}

Ответы [ 4 ]

17 голосов
/ 13 сентября 2010

IE просто не имеет этот метод для Array , хотя вы можете добавить его самостоятельно, из MDC :

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

Это добавляет .indexOf()если он отсутствует (на данный момент это означает, что вы находитесь в IE <9), то вы можете использовать его.Что касается того, почему даже IE8 не имеет этого уже?Я не могу помочь тебе там ... </p>

9 голосов
/ 13 сентября 2010

Если вы уже используете jQuery в своем проекте, вы можете использовать $ .inArray ()

http://api.jquery.com/jQuery.inArray/

0 голосов
/ 23 июля 2014

indexOf () на MSIE 11 и других, ему не нравятся нестроковые переменные.На окраине добавить .toString (), и это должно исправить.

0 голосов
/ 18 февраля 2011

эта функция плоха при использовании ассоциативных массивов.

, если вы помещаете эту функцию в свой код и делаете это

var a = new Array();

a["one"] = "1";

for(var i in a){

   alert(i)

}

Вы получаете 0, indexOf, что означает, что вы вставили indexOf в качестве ключа для каждого создаваемого вами массива

, но массив должен иметь только один ключ, и это "один"

использовать jQuery!

-Mekias

...