nLL*_*nLL 291 javascript internet-explorer indexof internet-explorer-8
以下功能适用于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!');
}
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*ver 486
IE9之前的IE版本没有.indexOf()
Array 的功能,要定义确切的规范版本,在尝试使用它之前运行它:
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
Run Code Online (Sandbox Code Playgroud)
这是MDN中的版本,用于Firefox/SpiderMonkey.在其他情况下,例如IE,它会.indexOf()
在它丢失的情况下添加...此时基本上是IE8或更低.
Meh*_*way 17
如果您正在使用jQuery并希望继续使用indexOf而不必担心兼容性问题,则可以执行以下操作:
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(val) {
return jQuery.inArray(val, this);
};
}
Run Code Online (Sandbox Code Playgroud)
这在您想要继续使用indexOf
时很有用,但在它不可用时提供后备.
Lui*_*rez 10
对于一个非常详尽的解释和解决方法,不仅对于indexOf而且在IE中缺少其他数组函数,请查看StackOverflow问题在Internet Explorer中修复JavaScript数组函数(indexOf,forEach等)
如果你想使用它,请小心$ .inArray.我刚刚发现$ .inArray只适用于"Array",而不适用于String.这就是为什么这个功能无法在IE8中运行!
jQuery API让人感到困惑
$ .inArray()方法类似于JavaScript的原生.indexOf()方法,因为它在找不到匹配项时返回-1.如果数组中的第一个元素与value匹配,则$ .inArray()返回0
- >他们不应该说"相似".由于indexOf支持"String"也!