[英]How can I trigger a Drag and Drop file upload?
I have made a webpage with a input form.我制作了一个带有输入表单的网页。 A user can either click on the box or drag and drop a file.用户可以单击框或拖放文件。
I am having no issue with click and upload.我对点击和上传没有问题。
The issue here is with drag and drop upload.这里的问题是拖放上传。 Whenever I drag and drop a file over the desired area, the files gets registered in the DataTransfer but it doesn't trigger the drag and drop and hence no further processing.每当我将文件拖放到所需区域上时,文件都会在 DataTransfer 中注册,但不会触发拖放,因此不会进行进一步处理。
$form.trigger('submit')
I used this line to trigger the drag and drop but it triggers <input>
again and an empty file is returned instead of the file in DataTransfer. $form.trigger('submit')
我使用这一行来触发拖放,但它再次触发<input>
并返回一个空文件而不是 DataTransfer 中的文件。
Codepen Link: Codepen代码笔链接:代码笔
Here is the complete JS code.这是完整的JS代码。
//The code that triggers when the file is dropped. The trigger code should be in this function below;
dropArea.addEventListener("drop", (e) => {
e.stopPropagation();
e.preventDefault();
dropArea.classList.add("drop_area--drag");
container.classList.add("container--drag");
orSpan.classList.add("or_span--drag");
dropInfo.classList.add("drop_info--drag");
btn.classList.add("pdf_btn--drag");
icon.classList.add("icon--drop");
loading.classList.remove("loading");
loading.classList.add("loading--drop");
button.classList.add("pdf_btn_container--drag");
/*reader.onload = ()=>{
};*/
file = e.dataTransfer.files;
//let $form = $('form');
//$form.trigger('submit');
console.log(file);
if (file.length > 1 || file.length === 0) {
alert("Multiple files selected!");
dropArea.classList.remove("drop_area--drag");
container.classList.remove("container--drag");
orSpan.classList.remove("or_span--drag");
dropInfo.classList.remove("drop_info--drag");
btn.classList.remove("pdf_btn--drag")
loading.classList.add("loading");
loading.classList.remove("loading--drop");
button.classList.remove("pdf_btn_container--drag");
icon.classList.remove("icon--drag");
icon.classList.remove("icon--drop");
} else {
file = file[0];
//console.log(file);
$(function(){
let $form = $("form");
//$form.trigger('submit');
ajaxData = new FormData();
console.log(1,file);
ajaxData.append($('input').attr('name'), file);
console.log(2,file);
console.log(ajaxData);
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
data: ajaxData,
//dataType: 'json',
cache: false,
contentType: false,
processData: false,
success: function (data){
console.log("Success");
},
});
//$form.trigger('submit'); //Using this triggers the <input> box and an empty file is returned instead of the file in DataTransfer.
});
}
});
//The code below triggers <input> because input button is hidden.
document.getElementById("certificate").onchange = function () {
console.log("Le bhai main bhi chal gya!");
dropArea.classList.add("drop_area--drag");
container.classList.add("container--drag");
orSpan.classList.add("or_span--drag");
dropInfo.classList.add("drop_info--drag");
btn.classList.add("pdf_btn--drag");
icon.classList.add("icon--drop");
loading.classList.remove("loading");
loading.classList.add("loading--drop");
button.classList.add("pdf_btn_container--drag");
console.log(document.getElementById("certificate").value);
document.getElementsByTagName("form")[0].submit();
}
PS <input>
here means click and upload. PS <input>
这里的意思是点击上传。
$form.trigger('submit')
can be used to trigger the form. $form.trigger('submit')
可用于触发表单。 In my case it is now triggering twice sending my file and an empty octet-stream.在我的情况下,它现在触发两次发送我的文件和一个空的八位字节流。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.