2010-09-13 14 views
5

Bu işlev, Gönderme formları sırasında yürütülür ve Firefox ve Chrome'da iyi çalışır, ancak IE'de çalışmaz. Ben indexOf şüpheleniyorum, ama işe almak için bir yol bulmak için görünmüyor olabilir.Internet Explorer'da indexOf neden çalışmıyor?

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

} 
+0

Değişken "banliyöler" ne içerir? – Tim

+0

"SuburbName (postCode)" – David

+0

arasındaki olası dizgiler dizisi [Neden IEO dizisi IE8 üzerinde çalışmıyor?] (Http://stackoverflow.com/questions/3629183/why-doesnt -indexof-iş-on-bir-dizi-ie8). Ayrıca bkz .: [IE tarayıcıları için JavaScript'te Array indexOf() nasıl düzeltilir] (http://stackoverflow.com/questions/1744310/), [Internet Explorer için dizi indexOf uygulaması] (http://stackoverflow.com/questions)/2868696) – CMS

cevap

17

IE basitçe Array üzerinde bu yöntemi yoktur, sen olsa bunu from MDC kendiniz ekleyebilirsiniz: Bu (eksik ise

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

Bu konum anlamına gelen bu noktada .indexOf() ekler IE < 9) daha sonra onu kullanabilirsiniz. Niçin IE8 bile buna sahip değil? Zaten projenizde jQuery kullanıyorsanız seni ilişkilendirilebilir diziler kullanırken

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

+0

Bu işe yaramadı ve Firefox'ta çalışmayı durdurdu. Bu işlevin çağrılmasından sonra veya komut dosyasının başlangıcında yerleştirilmeli mi? – David

+0

@David: Çağrılmadan önce bildirilmesi gerekiyor. –

9

... Orada sana yardım edemez.

kodunuzda bu işlevi koymak ve dizi sadece bu

var a = new Array(); 

a["one"] = "1"; 

for(var i in a){ 

    alert(i) 

} 
Sen 0 olsun

, size

oluşturmak her diziye bir anahtar olarak indexOf takılı demektir indexOf ama olması gereken yaparsanız bir anahtar ve bu "bir"

jQuery!

-Mekias

+0

Teşekkürler, bu bana yardımcı oldu! : D – nn2

-1

bu fonksiyon kötüdür() $ .inArray kullanabilirsiniz

0

indexOf() MSIE 11 ve başkalarına dışı dize değişkenleri sevmez. Banliyöde .toString() öğesini ekleyin ve düzeltin.

İlgili konular