2013-11-23 4 views
0

내 함수에 배열의 모든 요소를 ​​전달하기 위해 노력하고있어 :전화 기능

e.target.files.forEach(myfunction); 

하지만이 오류를 얻을 : 나는에서 콘솔 로그를했다

Uncaught TypeError: Object # has no method 'forEach'

을 배열이 비어 있지 않음을 확인했습니다.

+0

'e.target.files '이 무엇이든, forEach() 메소드가 없습니다. –

+0

'[] .forEach.call (e.target.files, function() {})보십시오' – elclanrs

답변

3

e.target.files은 아마도 Array이 아니므로 forEach() 메서드가 없습니다. 나는 그것이 FileList 개체라고 추측합니다.

직접 반복하거나 배열 방법을 간접적으로 적용해야 할 수 있습니다. 그들은 다른 모든이없는 때문에 DOM이 Array 객체를 .length 속성을 가지고 [index]으로 인덱싱 할 수 있지만, 실제하지 않은 데이터 구조의 의사 배열 형식을 사용하는

var files = e.target.files; 
for (var i = 0; i < files.length; i++) { 
    myfunction(files[i]); 
} 

참고로, 그것은 일반적이다 배열 메소드. NodeList은 실제 어레이가 아닌 DOM에서 사용되는 또 다른 Array-like 오브젝트입니다.

이 가상 어레이를 실제 배열에 복사하거나 .call() 또는 .apply()을 사용하여 일부 배열 메소드를 적용하는 것도 가능하지만 여기서는 필요하지 않습니다. 위의 간단한 루프는 위의 루프를 참조하십시오.

-1

Foreach는 기본 배열 방법이 아닙니다. 이 코드를 복사 한 경우 어떤 파일이 추가되었는지 확인하십시오.

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ forEach – elclanrs

+1

'forEach'는 ECMAScript 5 이후'Array'의 표준 메소드입니다. –