需求
- 最多选择两个文件
- 每个文件后面都有一个删除按钮,点击按钮删除该li,同时也删除文件域中对应的文件
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script>
window.onload = function(){
var oFile = document.getElementById('file');
var oList = document.getElementById('fileList');
var delNode = function(i){
console.log(i);
}
oFile.onchange = function(e){
if(this.files.length>2){
alert('最多选择两个文件!');
this.value = '';
}else{
for(var i=0;i<this.files.length;i++){
var node = document.createElement('li');
node.setAttribute('id','li_'+i);
var html = this.files[i].name+"<button title='btn_"+i+"' class='delBtn'>del</button>";
node.innerHTML = html;
oList.appendChild(node);
}
}
};
};
</script>
</head>
<body>
<input type="file" multiple id="file">
<ul id="fileList">
</ul>
<input type="button" value="Clear" id="clearBtn">
</body>
</html>
疑问
- 前面都实现了
- 点删除按钮的时候删除li好写,但是怎么删除文件域中的那个元素?
JS目前无法直接操作FileList对象,但我们还是可以处理的,我能想到的就是将FileList从原来的form提交方式抽离出来,可以使用xhr2的二进制方式提交。
比如下写法: