2010-09-13 17 views
5

Diese Funktion wird während der Formulare onSubmit ausgeführt und funktioniert in Firefox und Chrome, aber nicht in IE. Ich vermute, dass es indexOf ist, aber ich kann keinen Weg finden, es zum Laufen zu bringen.Warum funktioniert indexOf im Internet Explorer nicht?

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

Was enthält Variable "Vorstädte"? – Tim

+0

Es ist ein Array von Strings in der Art von "suburbName (postCode)" – David

+0

mögliche Duplikate von [Warum nicht indexOf auf einem Array IE8 arbeiten?] (Http://StackOverflow.com/questions/3629183/why-doesnt -Index der Arbeit-auf-einem-Array-ie8). Siehe auch: [Wie man Array indexOf() in JavaScript für IE-Browser repariert] (http://stackoverflow.com/questions/1744310/), [Array indexOf-Implementierung für Internet Explorer] (http://stackoverflow.com/questions/2868696) – CMS

Antwort

17

IE einfach nicht haben diese Methode auf Array, können Sie es selbst hinzufügen aber from 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; 
    }; 
} 

Dies fügt .indexOf() wenn es (an dieser Stelle fehlt, die Sie in Mittel sind IE < 9) dann können Sie es verwenden. Warum hat das sogar IE8 nicht schon? Ich kann Ihnen nicht helfen ...

+0

Das schien nicht zu funktionieren und hat es auch in Firefox nicht mehr funktionieren lassen. Muss dies nach dem Aufruf der Funktion oder zu Beginn des Skripts erfolgen? – David

+0

@David: Es muss vor dem Aufruf deklariert werden. –

-1

diese Funktion schlecht ist, wenn assoziative Arrays verwenden.

, wenn Sie diese Funktion in Ihrem Code setzen und tun dies

var a = new Array(); 

a["one"] = "1"; 

for(var i in a){ 

    alert(i) 

} 

Sie haben 0 erhalten, indexOf was bedeutet, Sie indexOf als Schlüssel zu jedem Array eingefügt Sie

erstellen

aber das Array nur sollte ein Schlüssel und das ist "eins"

Verwenden Sie jQuery!

-Mekias

0

indexOf() auf MSIE 11 und andere es nicht Nicht-String-Variablen nicht mag. Fügen Sie an Vororten .toString() hinzu und es sollte es beheben.

Verwandte Themen