HTML5 FileList 和 JQuery 各自

发布于 2024-10-21 22:55:20 字数 425 浏览 4 评论 0原文

我抓取文件列表([http://www.w3.org/TR/FileAPI /#dfn-filelist]),然后我想使用 JQuery 的 every 函数。

var file_list = $(this).attr('files');
/* Code goes here */
file_list.each(function()
{
/* Code goes here */

我收到以下错误:

Uncaught TypeError: Object #<FileList> has no method 'each'

有什么想法吗?谢谢。

I grab the filelist ([http://www.w3.org/TR/FileAPI/#dfn-filelist]) and then I want to use JQuery's each function.

var file_list = $(this).attr('files');
/* Code goes here */
file_list.each(function()
{
/* Code goes here */

I get the following error:

Uncaught TypeError: Object #<FileList> has no method 'each'

Any idea? Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

还不是爱你 2024-10-28 22:55:21
var file_list = $(this).attr('files');
$.each(file_list,function(i,item){
  // i is the index (integer) of current item
  // item is the current item
  // $(this) is the jQuery selector for the current item
});
var file_list = $(this).attr('files');
$.each(file_list,function(i,item){
  // i is the index (integer) of current item
  // item is the current item
  // $(this) is the jQuery selector for the current item
});
南城追梦 2024-10-28 22:55:21

2011年5月,jQuery 1.6发布,它改变了.attr()的行为,您应该使用.prop()来访问文件 > 文件输入的属性。
这里有一些处理 FileList 对象的其他方法。

//Get the files property (FileList object) of a file input element from a jQuery instance.
var arraylike=$file_input.prop('files');
//Create an array from an arraylike object using the old hacky way
file_array=Array.prototype.splice.call(arraylike,0,0);
//Or the new way.
file_array=Array.from(arraylike);
//Or just work on it directly.
Array.prototype.forEach.call(arraylike,x=>{console.log(x);});
//Or if you really must use jQuery...
jQuery.each(arraylike,(k,v)=>{console.log(v);});

如果有人想做自己的研究:

In 2011 May, jQuery 1.6 was released which changed the behavior of .attr(), you should use .prop() instead to access the files property of a file input.
Here are some additional ways to deal with a FileList object.

//Get the files property (FileList object) of a file input element from a jQuery instance.
var arraylike=$file_input.prop('files');
//Create an array from an arraylike object using the old hacky way
file_array=Array.prototype.splice.call(arraylike,0,0);
//Or the new way.
file_array=Array.from(arraylike);
//Or just work on it directly.
Array.prototype.forEach.call(arraylike,x=>{console.log(x);});
//Or if you really must use jQuery...
jQuery.each(arraylike,(k,v)=>{console.log(v);});

In case anyone wants to do their own research:

惯饮孤独 2024-10-28 22:55:20

这是因为 $(this).attr('files'); 仅返回纯 DOM 文件列表,而不是 jQuery 对象。

要么你需要用老式的方式循环它:

for(var i=0,file;file=file_list[i];i++) {
 //do your thing
}

要么你可以使用 $.each:

$.each(file_list,function(idx,elm){
     //do your thing
});

请注意 $.each 比普通的 for 循环慢,在这种情况下给你带来的便利很少,所以我会坚持使用for 循环。

It is because $(this).attr('files'); just returns the plain DOM file list, and not a jQuery object.

Either you need to loop over it the old fashioned way:

for(var i=0,file;file=file_list[i];i++) {
 //do your thing
}

or you could use $.each:

$.each(file_list,function(idx,elm){
     //do your thing
});

Be aware that $.each is slower than the plain for loop, and in this case gives you very little convenience, so i'd stick with the for loop.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文