1

当我使用 jquery 选择器将文件定义为变量时,出现此错误: Uncaught TypeError: Array.prototype.map called on null or undefined。如果我使用:

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);
 });
4

2 回答 2

2

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

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

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

于 2013-02-19T17:42:45.073 回答
2

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

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

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

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

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

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

于 2013-02-19T17:43:29.520 回答