La siguiente función funciona bien en Opera, Firefox y Chrome. Sin embargo, en IE8 falla por if ( allowed.indexOf(ext[1]) == -1)
parte.
¿Alguien sabe por qué? ¿Hay algún error obvio?
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!');
}
}
Respuestas:
Las versiones de IE antes de IE9 no tienen una
.indexOf()
función para Array, para definir la versión exacta de especificaciones , ejecute esto antes de intentar usarlo:Esta es la versión de MDN , utilizada en Firefox / SpiderMonkey. En otros casos, como IE, se agregará
.indexOf()
en caso de que falte ... básicamente IE8 o inferior en este punto.fuente
for...in
bucle para iterar una matriz, debería usarse solo para enumeración .for..in
en una matriz solo causará problemas, no es solo una convención ... es un uso involuntario y uno incorrecto. El orden y las claves no están completamente especificados, dependen de la implementación ... por ejemplo, IE enumerará los elementos de la matriz en el orden en que se agregaron , no por su índice. Sin embargo, puede iterar correctamente, accediendo por índice.Si usa jQuery, puede usar $ .inArray () en su lugar.
fuente
Si está usando jQuery y desea seguir usando indexOf sin preocuparse por problemas de compatibilidad, puede hacer esto:
Esto es útil cuando desea seguir usando
indexOf
pero proporciona un respaldo cuando no está disponible.fuente
Para obtener una explicación realmente completa y una solución alternativa, no solo para indexOf, sino también para otras funciones de matriz que faltan en IE, consulte la pregunta de StackOverflow Cómo arreglar las funciones de matriz de JavaScript en Internet Explorer (indexOf, forEach, etc.)
fuente
Tenga cuidado con $ .inArray si desea usarlo. Me acabo de enterar de que $ .inArray solo funciona con "Array", no con String. ¡Es por eso que esta función no funcionará en IE8!
La API jQuery crea confusión
-> No deberían decirlo "Similar". Desde indexOf soporta "String" también!
fuente
inArray
. Parece que definitivamente se aplica solo a matrices. Por eso es "similar a" y no "idéntico a".indexOf
un objeto String se encuentra completamente en IE, mientras queindexOf
en Array el prototipo no se encuentra en IE <= 8.El problema
IE <= 8 simplemente no tiene un
indexOf()
método para matrices.La solución
Si necesita
indexOf
en IE <= 8, debería considerar usar el siguiente polyfill , que se recomienda en el MDN :Minified:
fuente
Puede usar esto para reemplazar la función si no existe:
fuente