Приведенная ниже функция отлично работает на Opera, Firefox и Chrome. Однако в IE8 он не работает наif ( allowed.indexOf(ext[1]) == -1)
стороны.
Кто-нибудь знает почему? Есть ли очевидная ошибка?
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!');
}
}
Ответы:
Версии IE до IE9 не имеют
.indexOf()
функции для Array, чтобы определить точную версию спецификации , запустите ее, прежде чем пытаться ее использовать:Это версия от MDN , используемая в Firefox / SpiderMonkey. В других случаях, таких как IE, он будет добавлен
.indexOf()
в случае, если он отсутствует ... в основном IE8 или ниже в этой точке.источник
for...in
цикл для итерации массива, он должен использоваться только для перечисления .for..in
в массиве вызовет только проблемы, это не просто соглашение ... это непреднамеренное использование и неправильное. Порядок и ключи не полностью определены, они зависят от реализации ... например, IE будет перечислять элементы массива в порядке их добавления , а не по их индексу. Однако вы можете выполнять итерацию правильно, получая доступ по индексу.Если вы используете jQuery, вы можете использовать вместо него $ .inArray () .
источник
Если вы используете jQuery и хотите продолжать использовать indexOf, не беспокоясь о проблемах совместимости, вы можете сделать это:
Это полезно, если вы хотите продолжать использовать,
indexOf
но обеспечите запасной вариант, когда он недоступен.источник
Для действительно подробного объяснения и обходного пути не только для indexOf, но и для других функций массива, отсутствующих в IE, задайте вопрос StackOverflow. Исправление функций массива JavaScript в Internet Explorer (indexOf, forEach и т. Д.)
источник
Пожалуйста, будьте осторожны с $ .inArray, если хотите его использовать. Я только что узнал, что $ .inArray работает только с "Array", а не со String. Вот почему эта функция не будет работать в IE8!
JQuery API создает путаницу
-> Они не должны говорить это «похоже». Так как indexOf поддержки "String" также!
источник
inArray
. Кажется, что это вполне применимо только к массивам. Вот почему он «похож на», а не «идентичен».indexOf
в том, что объект String полностью найден в IE, в то время какindexOf
в Array прототип не найден в IE <= 8.Эта проблема
IE <= 8 просто не имеет
indexOf()
метода для массивов.Решение
Если вам нужно
indexOf
в IE <= 8, вам следует рассмотреть возможность использования следующего полизаполнения , которое рекомендуется в MDN :Минимизировано:
источник
Вы можете использовать это для замены функции, если она не существует:
источник