2010-09-13 19 views
5

Questa funzione viene eseguita durante i moduli onSubmit e funziona perfettamente in Firefox e Chrome, ma non in IE. Sospetto che sia indexOf, ma non riesco a trovare un modo per farlo funzionare.Perché indexOf non funziona in Internet Explorer?

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

Che cosa contengono le "periferie" variabili? – Tim

+0

È una serie di stringhe che vanno sulla falsariga di "suburbName (postCode)" – David

+0

possibile duplicato di [Perché indexOf non funziona su un array IE8?] (Http://stackoverflow.com/questions/3629183/why-doesnt -indexof-lavoro-in-un-array-IE8). Vedi anche: [Come risolvere Array indexOf() in JavaScript per i browser IE] (http://stackoverflow.com/questions/1744310/), [Implementazione di indexOf per Internet Explorer] (http://stackoverflow.com/questions/2868696) – CMS

risposta

17

IE semplicemente non ha questo metodo su Array, è possibile aggiungere da soli, però, 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; 
    }; 
} 

Questo aggiunge .indexOf() se manca (a questo punto che significa che siete in IE < 9) quindi è possibile utilizzarlo. Per quanto riguarda il motivo per cui anche IE8 non ha già questo? Non posso fare lì ...

+0

Questo non sembrava funzionare, e ha fatto smettere di funzionare anche in Firefox. Questo deve essere posizionato dopo che la funzione è stata chiamata o all'inizio dello script? – David

+0

@David: deve essere dichiarato prima che venga chiamato. –

-1

questa funzione è male quando si usano array associativi.

se metti quella funzione nel codice e fare questo

var a = new Array(); 

a["one"] = "1"; 

for(var i in a){ 

    alert(i) 

} 

Si ottiene 0, indexOf il che significa che è stato inserito indexOf come chiave di ogni serie si crea

ma l'array dovrebbe avere solo una chiave e cioè "una"

utilizzare jQuery!

-Mekias

0

indexOf() su MSIE 11 e altri non piace variabili non stringa. Sui sobborghi aggiungi .toString() e dovrebbe risolverlo.

Problemi correlati