Die folgende Funktion funktioniert problemlos in Opera, Firefox und Chrome. In IE8 schlägt dies jedoch teilweise fehl if ( allowed.indexOf(ext[1]) == -1)
.
Weiß jemand warum? Gibt es einen offensichtlichen Fehler?
function CheckMe() {
var allowed = new Array('docx','xls','xlsx', 'mp3', 'mp4', '3gp', 'sis', 'sisx', 'mp3', 'wav', 'mid', 'amr', 'jpg', 'gif', 'png', 'jpeg', 'txt', 'pdf', 'doc', 'rtf', 'thm', 'rar', 'zip', 'htm', 'html', 'css', 'swf', 'jar', 'nth', 'aac', 'cab', 'wgz');
var fileinput=document.getElementById('f');
var ext = fileinput.value.toLowerCase().split('.');
if ( allowed.indexOf(ext[1]) == -1)
{
document.getElementById('uploadsec').innerHTML = document.getElementById('uploadsec').innerHTML;
alert('This file type is not allowed!');
}
}
Antworten:
Versionen von IE vor IE9 haben keine
.indexOf()
Funktion für Array. Um die genaue Spezifikationsversion zu definieren , führen Sie diese aus, bevor Sie versuchen, sie zu verwenden:Dies ist die Version von MDN , die in Firefox / SpiderMonkey verwendet wird. In anderen Fällen wie dem IE wird es hinzugefügt,
.indexOf()
falls es fehlt ... im Grunde IE8 oder darunter an dieser Stelle.quelle
for...in
Schleife verwenden, um ein Array zu iterieren , es sollte nur für die Aufzählung verwendet werden .for..in
in einem Array verursacht nur Probleme, es ist nicht nur eine Konvention. Es ist eine unbeabsichtigte und eine falsche Verwendung. Die Reihenfolge und die Schlüssel sind beide nicht vollständig angegeben, sie sind implementierungsabhängig. Beispielsweise listet der IE die Array-Elemente in der Reihenfolge auf, in der sie hinzugefügt wurden , und nicht anhand ihres Index. Sie können jedoch korrekt iterieren und über den Index zugreifen.Wenn Sie jQuery verwenden, können Sie stattdessen $ .inArray () verwenden.
quelle
Wenn Sie jQuery verwenden und indexOf weiterhin verwenden möchten, ohne sich um Kompatibilitätsprobleme sorgen zu müssen, können Sie Folgendes tun:
Dies ist hilfreich, wenn Sie weiterhin verwenden möchten,
indexOf
aber einen Fallback bereitstellen möchten, wenn dieser nicht verfügbar ist.quelle
Eine wirklich gründliche Erklärung und Problemumgehung, nicht nur für indexOf, sondern auch für andere im IE fehlende Array-Funktionen, finden Sie in der Frage StackOverflow. Beheben von JavaScript-Array-Funktionen in Internet Explorer (indexOf, forEach usw.)
quelle
Bitte seien Sie vorsichtig mit $ .inArray, wenn Sie es verwenden möchten. Ich habe gerade herausgefunden, dass $ .inArray nur mit "Array" funktioniert, nicht mit String. Deshalb funktioniert diese Funktion in IE8 nicht!
Die jQuery-API sorgt für Verwirrung
-> Sie sollten es nicht "ähnlich" sagen. Da indexOf auch "String" unterstützt!
quelle
inArray
. Das scheint ziemlich definitiv nur für Arrays zu gelten. Deshalb ist es "ähnlich" und nicht "identisch mit".indexOf
ein String-Objekt vollständig im IE gefunden wird, während derindexOf
Array-Prototyp nicht im IE <= 8 gefunden wird.Das Problem
IE <= 8 hat einfach keine
indexOf()
Methode für Arrays.Die Lösung
Wenn Sie
indexOf
in IE <= 8 benötigen , sollten Sie die folgende Polyfüllung in Betracht ziehen , die im MDN empfohlen wird :Minimiert:
quelle
Sie können dies verwenden, um die Funktion zu ersetzen, wenn sie nicht vorhanden ist:
quelle