2013-11-23 50 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]); 
} 

仅供参考,是很常见的DOM使用伪数组类型有.length性能,可与[index]被索引,但不是实际的Array对象的数据结构,所以他们没有所有其他数组方法。 NodeList是DOM使用的另一个类似数组的对象,它不是实际的数组。

也可以将此伪数组复制到实际数组中,或者使用.call().apply()对其应用一些数组方法,但我在此没有看到这一点。我想为简单的for循环,因为它很好,清楚发生了什么。

-1

Foreach不是数组的默认方法。如果您复制此代码,请确认添加了哪个文件。

+0

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

+1

'forEach'是自ECMAScript 5以来''Array'的标准方法。 –