Posts tagged ‘IE’

IE’deki Array.indexOf problemi

July 18th, 2008

Javascript ile uğraşırken hepimiz mutlaka en az bir kere, bir dizinin içinde aradığımız bir değerin olup olmadığını kontrol etme ihtiyacı hissetmişizdir.

Herkesin aklına ilk indexOf metodu gelir doğal olarak. Ama nedense diğer bir çok programlama dilinden aşina olduğumuz bu metod Internet Explorer takımının aklına gelmemiş.

Firefox, opera ve safari tarafından desteklenen ve javascript motorlarına dahil etmiş oldukları indexOf methodu IE motoruna eklenmemiş ne yazık ki. Bu nedenle yazmış olduğunuz kod firefox, opera ve safari’de çalışırken IE’nin hiç bir sürümünde (IE7′de bile) çalışmayacak.

Ama korkmayın :-) Javascript burada da imdadımıza yetişiyor. Javascript’te bulunan temel Array sınıfını prototype ile genişleterek kodumuzun IE’de de sorunsuz çalışmasını sağlayabiliriz. Size iki alternatif kod aktaracağım. Herhangi birini kullanmakta serbestsiniz.

İlk önce Firefox’un kendi motorunda da kullanmış olduğu kodu görelim:

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

    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;
  };
}

Veya aşağıdaki gibi daha basit bir kod kullanabiliriz:

if(!Array.indexOf){

      Array.prototype.indexOf = function(s){
         for(var i = 0; i < this.length; i++)
            if(this[i] === s) return i;

         return -1;
      }
   }

Yukarıdaki kodlardan herhangi birini javascript kodunuza dahil ettiğinizde, kodunuz artık browser ayrımı yapmadan çalışacaktır.

    var myArray = ["1","2","3","4"];
    alert(myArray.indexOf("3")); // Bütün browserler de 2 değerini verir.
Önemli not : Her iki metod Firefox, IE, Safari ve Opera’da test edilmiş ve testi başarıyla geçmişlerdir.
Ayrıca inceleyin:
SEO Powered by Platinum SEO from Techblissonline