Pourquoi ne pas indexOf travail sur un tableau IE8?
Ci-dessous la fonction fonctionne très bien sur Opera, Firefox et Chrome. Cependant, dans IE8 il échoue sur la if ( allowed.indexOf(ext[1]) == -1)
partie.
Personne ne sait pourquoi? Est-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!');
}
}
- La grande question, la grande réponse. Merci de me donner exactement ce dont j'avais besoin.
Vous devez vous connecter pour publier un commentaire.
Versions d'IE avant IE9 n'avez pas de
.indexOf()
fonction de Tableau, de définir l'exacte version spec, exécutez ceci avant d'essayer de l'utiliser:C'est la version de MDN, utilisé dans Firefox/SpiderMonkey. Dans d'autres cas, tels que IE, il va ajouter
.indexOf()
dans le cas qu'il en manque... en gros IE8 ou au-dessous de ce point.for...in
boucle iterate un tableau, il doit être utilisé pour énumération seulement.for..in
sur un tableau ne fera que causer des problèmes, ce n'est pas seulement une convention..c'est non intentionnels de l'utilisation et de l'autre incorrecte. La commande et les touches sont à la fois pas complètement spécifié, ils sont dépendant de l'implémentation...par exemple IE énumérer les éléments de tableau dans l'ordre où ils ont été ajouté, et non par leur index. Cependant, vous pouvez iterate correctement, l'accès par index.for ... in
sur un tableau d'objet est tout d'avoir des ennuis, et pratiquement 100% du temps, je les ai vu faire (ici DONC, et d'ailleurs), il a été fait par quelqu'un qui n'en sait pas plus, et pas par quelqu'un avec une profonde compréhension de l'effectif de la sémantique.Si vous utilisez jQuery, vous pouvez utiliser $.inArray() à la place.
Si vous utilisez jQuery et souhaitez continuer à utiliser indexOf sans vous soucier des problèmes de compatibilité, vous pouvez le faire :
Cette fonction est utile lorsque vous souhaitez continuer à utiliser
indexOf
, mais de fournir une solution de secours quand il n'est pas disponible.Une explication approfondie et d'une solution, non seulement pour indexOf mais d'autres fonctions de tableau manquant dans IE découvrez la StackOverflow question Fixation JavaScript les fonctions de Tableau dans Internet Explorer (indexOf, forEach, etc.)
S'il vous plaît attention avec $.inArray si vous voulez l'utiliser.
Je viens de constater que le $.inArray est ne fonctionne qu'avec les "Array", pas avec de la Ficelle.
C'est pourquoi cette fonction ne fonctionne pas avec IE8!
Le jQuery API de faire la confusion
--> Ils ne le dis pas "Similaires". Depuis indexOf support "Chaîne" aussi!
inArray
. Qui semble assez définitivement de s'appliquer à des tableaux. C'est pourquoi il est "semblable" et non pas "identique à."indexOf
dans un objet String est entièrement trouvé dans IE alors queindexOf
dans la gamme prototype n'est pas trouvé dans IE <= 8.Le problème
IE<=8 il suffit de ne pas avoir un
indexOf()
méthode pour les tableaux.La solution
Si vous avez besoin d'
indexOf
dans IE<=8, vous devriez envisager d'utiliser les éléments suivants polyfill, qui est recommandé à la MDN :Minifiés :
Vous pouvez l'utiliser pour remplacer la fonction si elle n'existe pas: