La fonction ci-dessous fonctionne correctement sur Opera, Firefox et Chrome. Cependant, dans IE8, il échoue de la if ( allowed.indexOf(ext[1]) == -1)
part.
Quelqu'un sait-il pourquoi? Y a-t-il une erreur évidente?
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!');
}
}
Réponses:
Les versions d'IE avant IE9 n'ont pas de
.indexOf()
fonction pour Array, pour définir la version exacte des spécifications , exécutez ceci avant d'essayer de l'utiliser:Il s'agit de la version de MDN , utilisée dans Firefox / SpiderMonkey. Dans d'autres cas comme IE, cela ajoutera
.indexOf()
dans le cas où il manque ... essentiellement IE8 ou inférieur à ce stade.la source
for...in
boucle pour itérer un tableau, il ne doit être utilisé que pour l' énumération .for..in
sur un tableau ne causera que des problèmes, ce n'est pas seulement une convention ... c'est une utilisation imprévue et incorrecte. L'ordre et les clés ne sont pas tous les deux complètement spécifiés, ils dépendent de l'implémentation ... par exemple, IE énumérera les éléments du tableau dans l'ordre où ils ont été ajoutés , et non par leur index. Cependant, vous pouvez itérer correctement en accédant par index.Si vous utilisez jQuery, vous pouvez utiliser $ .inArray () à la place.
la source
Si vous utilisez jQuery et souhaitez continuer à utiliser indexOf sans vous soucier des problèmes de compatibilité, vous pouvez le faire:
Ceci est utile lorsque vous souhaitez continuer à utiliser,
indexOf
mais fournit une solution de rechange lorsqu'elle n'est pas disponible.la source
Pour une explication et une solution très complètes, non seulement pour indexOf mais d'autres fonctions de tableau manquantes dans IE, consultez la question StackOverflow Fixing JavaScript Array functions in Internet Explorer (indexOf, forEach, etc.)
la source
Veuillez faire attention à $ .inArray si vous souhaitez l'utiliser. Je viens de découvrir que $ .inArray ne fonctionne qu'avec "Array", pas avec String. C'est pourquoi cette fonction ne fonctionnera pas dans IE8!
L'API jQuery crée de la confusion
-> Ils ne devraient pas dire "similaire". Depuis indexOf supporte également "String"!
la source
inArray
. Cela semble s'appliquer définitivement aux tableaux uniquement. C'est pourquoi il est "similaire à" et non "identique à".indexOf
qu'un objet String est entièrement trouvé dans IE tandis queindexOf
dans Array, le prototype n'est pas trouvé dans IE <= 8.Le problème
IE <= 8 n'a tout simplement pas de
indexOf()
méthode pour les tableaux.La solution
Si vous avez besoin
indexOf
dans IE <= 8, vous devriez envisager d'utiliser le polyfill suivant , qui est recommandé au MDN :Minifié:
la source
Vous pouvez l'utiliser pour remplacer la fonction si elle n'existe pas:
la source