问题
使用input的文件上传在连续上传两个相同文件时没有触发change事件,纳尼?!
经过一帆查找资料,原来,使用input[type=file]上传文件,使用的是onchange去做,onchange监听的是input的value值,只有在内容发生改变的时候去触发,而value值在上传文件的时候保存的是文件的内容,连续上传相同文件的话,value值不改变,change事件进而不会触发。
原来是这样啊。如何解决呢?
在change事件函数中的最后设置当前input的value值为空就好了~
$(this).val('');
1 | function showFile(files){ |
下面放上一个拖拽上传文件的函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30//阻止浏览器默认行。
$(document).on({
dragleave:function(e){ //拖离
e.preventDefault();
},
drop:function(e){ //拖后放
e.preventDefault();
},
dragenter:function(e){ //拖进
e.preventDefault();
},
dragover:function(e){ //拖来拖去
e.preventDefault();
}
});
var box = document.getElementById('drop-area'); //拖拽区域
box.addEventListener("drop",function(e){
e.preventDefault(); //取消默认浏览器拖拽效果
var fileList = e.dataTransfer.files; //获取文件对象
if(showFile(fileList)){
//上传
xhr = new XMLHttpRequest();
xhr.open("post", "upload.php", true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
var fd = new FormData();
fd.append('mypic', fileList[0]);
xhr.send(fd);
}
},false);