Fungsi di bawah berfungsi dengan baik di Opera, Firefox dan Chrome. Namun, di IE8 gagal pada if ( allowed.indexOf(ext[1]) == -1)
bagian tersebut.
Adakah yang tahu mengapa? Apakah ada kesalahan yang jelas?
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!');
}
}
Jawaban:
Versi IE sebelum IE9 tidak memiliki
.indexOf()
fungsi untuk Array, untuk menentukan versi spesifikasi yang tepat , jalankan ini sebelum mencoba menggunakannya:Ini adalah versi dari MDN , digunakan di Firefox / SpiderMonkey. Dalam kasus lain seperti IE, itu akan menambah
.indexOf()
dalam kasus itu hilang ... pada dasarnya IE8 atau di bawah pada saat ini.sumber
for...in
loop untuk mengulangi array, itu harus digunakan untuk enumerasi saja.for..in
pada array hanya akan menyebabkan masalah, itu bukan hanya sebuah konvensi .. itu penggunaan yang tidak disengaja dan salah. Urutan dan kunci keduanya tidak sepenuhnya ditentukan, mereka tergantung pada implementasi ... misalnya IE akan menghitung item array dalam urutan mereka ditambahkan , bukan oleh indeks mereka. Namun Anda dapat mengulangi dengan benar, mengakses dengan indeks.Jika Anda menggunakan jQuery, Anda dapat menggunakan $ .inArray () sebagai gantinya.
sumber
Jika Anda menggunakan jQuery dan ingin tetap menggunakan indexOf tanpa khawatir tentang masalah kompatibilitas, Anda dapat melakukan ini:
Ini membantu ketika Anda ingin tetap menggunakan
indexOf
tetapi memberikan fallback ketika itu tidak tersedia.sumber
Untuk penjelasan dan penyelesaian yang sangat menyeluruh, tidak hanya untuk indexOf tetapi fungsi array lain yang hilang di IE, periksa pertanyaan StackOverflow Memperbaiki fungsi JavaScript Array di Internet Explorer (indexOf, forEach, dll.)
sumber
Harap berhati-hati dengan $ .inArray jika Anda ingin menggunakannya. Saya baru tahu bahwa $ .inArray hanya berfungsi dengan "Array", bukan dengan String. Itu sebabnya fungsi ini tidak akan berfungsi di IE8!
API jQuery membuat kebingungan
-> Mereka seharusnya tidak mengatakannya "Mirip". Karena indexOf mendukung "String" juga!
sumber
inArray
. Tampaknya cukup definitif untuk diterapkan pada array saja. Itu sebabnya "mirip dengan" dan bukan "identik dengan".indexOf
dalam objek String sepenuhnya ditemukan di IE sementaraindexOf
di Array prototipe tidak ditemukan di IE <= 8.Masalah
IE <= 8 tidak memiliki
indexOf()
metode untuk array.Solusinya
Jika Anda membutuhkan
indexOf
di IE <= 8, Anda harus mempertimbangkan menggunakan polyfill berikut , yang direkomendasikan di MDN :Diperkecil:
sumber
Anda dapat menggunakan ini untuk mengganti fungsi jika tidak ada:
sumber