当我使用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);
});
答案 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节点。