2013-11-23 3 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.

Возможно, вам придется выполнить итерацию самостоятельно или косвенно применить методы массива.

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

FYI, он является общим для DOM использовать псевдо-тип массивов структур данных, которые имеют свойство .length и может быть проиндексированы с [index], но не являются фактическими Array объектов так, чтобы они не имеют все остальные методы массива. NodeList - это еще один подобный Array объект, используемый DOM, который не является фактическим массивом.

Можно также скопировать этот псевэд-массив в фактический массив или применить к нему некоторые методы массива, используя .call() или .apply(), но я не вижу этого, как необходимо здесь. Я бы попросил простую петлю for выше, так как это приятно и понятно, что происходит.

-1

Foreach не является методом по умолчанию для массива. Если вы скопировали этот код, проверьте, какой файл добавлен.

+0

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

+1

'forEach' - стандартный метод для' Array' с ECMAScript 5. –

Смежные вопросы