event.target和getelementbyid之间的差异
Difference between event.target and getelementbyid
我正在使用File API
,我想知道event.target.files[0]
和getElementbyId("demo").files[0]
之间是否有区别
后者似乎奏效了。上下文可能会有所帮助,下面的代码使用event.target.files[0]
:的实例
<!DOCTYPE html>
<html>
<head>
<title> Home Page </title>
</head>
<body>
<input type="file" id="file" name="file"/>
<output id="list"></output>
<p id="demo"></p>
<script>
function handleFileSelect(evt) {
// grab the file that was uploaded which is type File.
// evt is the event that was triggered
// evt.target returns the element that triggered the event
// evt.target.files[0] returns the file that was uploaded, type File
var file = evt.target.files[0];
//file is not of TYPE BLOB!!!
// instantiate a FileReader object to read/save the file that was uploaded
var reader = new FileReader();
// read the file and save as an array
arrayoffile=reader.readAsArrayBuffer(file);
document.getElementById("demo").innerHTML = arrayoffile.length;
window.alert("hello");
}
document.getElementById('file').addEventListener('change', handleFileSelect, false);
</script>
</body>
</html>
谢谢!
evt.target.files[0]
和document.getElementById('file').files[0]
是handleFileSelect
处理程序中完全相同的对象。
问题是您使用FileReader
不正确。readAsArrayBuffer
仅开始读取缓冲区。
readAsArrayBuffer方法用于开始读取指定的Blob或文件。当读取操作完成时readyState变为DONE,并触发loadend。在那个时候,result属性包含一个ArrayBuffer,表示文件的数据
您需要附加事件处理程序onload
和/或onerror
才能获得一些结果。看看下面:
function handleFileSelect(evt) {
var file = evt.target.files[0];
var reader = new FileReader();
reader.onload = function(event) {
var arrayBuffer = event.target.result;
document.getElementById("demo").innerHTML = arrayBuffer.byteLength;
};
reader.readAsArrayBuffer(file);
}
document.getElementById('file').addEventListener('change', handleFileSelect, false);
<input type="file" id="file" name="file" />
<output id="list"></output>
<p id="demo"></p>
注意,ArrayBuffer
提供了byteLength
属性。
readAsArrayBuffer
不返回值,您需要监听Reader的事件。
MDN FileReader.readAsArrayBuffer:
当读取操作完成时,
readyState
变为DONE
,并且loadend
被触发。此时,result
属性包含一个表示文件数据的ArrayBuffer。
var reader = new FileReader();
reader.onloadend = function(e) {
var arrayBuffer = reader.result;
}
reader.readAsArrayBuffer(file);
并且ArrayBuffer的大小不是length
而是byteLength
。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在控制器和数据对象之间同步数据
- d3中堆栈函数和嵌套函数之间的差异
- JQuery:在页面之间滑动
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 操作放置在画布上的元素之间的连接
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- jquery在表单之间切换
- Nodejs API控制器,用于在API之间切换
- 如何在aspx页面之间传递参数
- 在索引.html和应用.js [node.js] 之间共享变量
- 什么是&&在没有if的行中的变量之间
- DOM元素和angular元素之间的主要区别是什么
- DataTables在表之间移动行