A função abaixo funciona bem no Opera, Firefox e Chrome. No entanto, no IE8, ele falha por if ( allowed.indexOf(ext[1]) == -1)
parte.
Alguem sabe por quê? Existe algum erro óbvio?
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!');
}
}
Respostas:
As versões do IE anteriores ao IE9 não possuem uma
.indexOf()
função para Array. Para definir a versão exata das especificações , execute isso antes de tentar usá-lo:Esta é a versão do MDN , usada no Firefox / SpiderMonkey. Em outros casos, como o IE, ele adiciona
.indexOf()
o caso de estar faltando ... basicamente o IE8 ou abaixo neste momento.fonte
for...in
loop para iterar uma matriz, ele deve ser usado apenas para enumeração .for..in
em uma matriz só causará problemas, não é apenas uma convenção ... é um uso não intencional e incorreto. A ordem e as chaves não são completamente especificadas, elas dependem da implementação ... por exemplo, o IE enumera os itens da matriz na ordem em que foram adicionados , não pelo índice. No entanto, você pode iterar corretamente, acessando por índice.Se você estiver usando jQuery, poderá usar $ .inArray () .
fonte
Se você estiver usando jQuery e quiser continuar usando o indexOf sem se preocupar com problemas de compatibilidade, faça o seguinte:
Isso é útil quando você deseja continuar usando,
indexOf
mas fornece um fallback quando não está disponível.fonte
Para obter uma explicação e uma solução realmente completas, não apenas para indexOf, mas outras funções de matriz ausentes no IE, consulte a pergunta StackOverflow Corrigindo funções de matriz de JavaScript no Internet Explorer (indexOf, forEach, etc.)
fonte
Por favor, tome cuidado com $ .inArray se você quiser usá-lo. Acabei de descobrir que o $ .inArray só funciona com "Array", não com String. É por isso que essa função não funciona no IE8!
A API jQuery cria confusão
-> Eles não deveriam dizer "Similar". Desde indexOf suporte "String" também!
fonte
inArray
. Isso parece definitivamente se aplicar apenas a matrizes. É por isso que é "semelhante a" e não "idêntico a".indexOf
em um objeto String é totalmente encontrado no IE, enquantoindexOf
na matriz protótipo não é encontrado no IE <= 8.O problema
O IE <= 8 simplesmente não possui um
indexOf()
método para matrizes.A solução
Se você precisar
indexOf
no IE <= 8, considere usar o seguinte polyfill , recomendado no MDN :Minificado:
fonte
Você pode usar isso para substituir a função se ela não existir:
fonte