使用jquery确定总文件大小

时间:2013-02-19 17:36:28

标签: javascript jquery

当我使用jquery选择器将文件定义为变量时,我收到此错误: 未捕获的TypeError:调用null或undefined的Array.prototype.map。如果我使用:

var file = document.getElementById('file'); 

而不是

var file = $('#file').val();

然后它可以工作,但我很好奇为什么使用jquery选择器不起作用。感谢

$('#file').on('change', function(){

  var file = $('#file').val();
      var sizes = [].map.call(file.files, function(v) {return v.size;});
      var totalSize = sizes.reduce(function(a, b) {return a + b;}, 0);
 });

2 个答案:

答案 0 :(得分:2)

val返回所选文件的名称,您应该使用files对象的InputElement属性。

$('#file').on('change', function(){
    var size = 0;
    $.each(this.files, function(i, v){
       size += v.size
    })
 });

请注意,IE浏览器不支持files属性。

答案 1 :(得分:2)

jquery选择器$("#element")返回一个jquery对象而不是一个实际的dom元素。

您可以通过在chrome或firebug中打开控制台并使用jquery选择元素来自行测试。

此外,$('file').val()是一个函数,用于返回具有value属性的dom元素的值。

如果要使用jquery进行选择但需要操作dom元素而不是jquery对象,则需要执行以下操作:

var file = $('#file')[0]; 

这将从jquery对象中检索dom节点。