Array IE8에서 Index Of가 작동하지 않는 이유는 무엇입니까?
아래 기능은 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!');
}
}
IE9보다 이전 버전의 IE에는 어레이 기능이 없습니다.정확한 사양 버전을 정의하려면 사용하기 전에 다음을 수행합니다.
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;
};
}
이것은 Firefox/SpiderMonkey에서 사용되는 MDN 버전입니다.IE와 같은 다른 경우, 분실 시 추가...기본적으로 IE8 이하입니다.
jQuery를 사용하는 경우 $.inArray()를 대신 사용할 수 있습니다.
jQuery를 사용하고 있으며 호환성 문제를 걱정하지 않고 indexOf를 계속 사용하려면 다음을 수행할 수 있습니다.
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(val) {
return jQuery.inArray(val, this);
};
}
이것은 계속 사용하고 싶을 때 도움이 됩니다.indexOf사용할 수 없을 때 예비품을 제공합니다.
자세한 설명과 회피책은 indexOf뿐만 아니라 IE에서 찾을 수 없는 다른 어레이 함수에 대해서도 Internet Explorer의 JavaScript Array 함수 수정 StackOverflow 질문을 참조하십시오(indexOf, forEach 등).
$.inArray를 사용하시려면 주의해주세요.$.inArray는 "Array"에서만 작동하며 String에서는 작동하지 않는다는 것을 방금 알게 되었습니다.그렇기 때문에 IE8에서는 이 기능이 작동하지 않습니다!
jQuery API가 혼란을 일으킵니다.
$.inArray() 메서드는 일치하지 않을 때 -1을 반환한다는 점에서 JavaScript의 네이티브 .indexOf() 메서드와 유사합니다.어레이 내의 첫 번째 요소가 값과 일치하는 경우 $.inArray()는 0을 반환합니다.
--> 「비슷하다」라고 말하면 안 됩니다.index Of support "String"도 지원하므로!
문제
IE <=8에는 어레이에 대한 방법이 없습니다.
해결 방법
필요하시면indexOfIE <=8에서는 MDN에서 권장하는 다음 폴리필 사용을 고려해야 합니다.
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(searchElement, fromIndex) {
var k;
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
var o = Object(this);
var len = o.length >>> 0;
if (len === 0) {
return -1;
}
var n = +fromIndex || 0;
if (Math.abs(n) === Infinity) {
n = 0;
}
if (n >= len) {
return -1;
}
k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
while (k < len) {
if (k in o && o[k] === searchElement) {
return k;
}
k++;
}
return -1;
};
}
최소화:
Array.prototype.indexOf||(Array.prototype.indexOf=function(r,t){var n;if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),i=e.length>>>0;if(0===i)return-1;var a=+t||0;if(Math.abs(a)===1/0&&(a=0),a>=i)return-1;for(n=Math.max(a>=0?a:i-Math.abs(a),0);i>n;){if(n in e&&e[n]===r)return n;n++}return-1});
함수가 존재하지 않는 경우 이를 사용하여 대체할 수 있습니다.
<script>
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;
};
}
</script>
언급URL : https://stackoverflow.com/questions/3629183/why-doesnt-indexof-work-on-an-array-ie8
'source' 카테고리의 다른 글
| PHP 오류: "zip 확장 및 unzip 명령이 모두 없습니다. 건너뜁니다." (0) | 2022.11.11 |
|---|---|
| MySQL join with where 절 (0) | 2022.11.11 |
| MySQL에 있는 테이블 수를 세는 쿼리 (0) | 2022.11.11 |
| SQL 피벗 및 문자열로 저장된 날짜 간의 차이 계산 - MySQL (0) | 2022.11.11 |
| 단일 null 인수를 사용하여 Java varargs 메서드를 호출하시겠습니까? (0) | 2022.11.11 |