javascript - 多次触发 Drop 事件
问题描述
所以我已经为拖放区域实现了这个逻辑,如果用户添加一个非图像文件,我会提醒用户该文件不是图像并且它的格式无效。
但是一旦我按下确定,警报就会再次出现,并且有时会持续多次(我实际上计算了这个,计数等于你拖放文件的次数)。下面是该方法的相关代码:
function setDropZoneWithCropper() {
var toBeCroppedImage = document.getElementById('toBeCroppedImage');
droparea = document.querySelector("#add-to-be-cropped-image-section");
droparea.addEventListener("dragover", (e) => {
e.preventDefault();
droparea.classList.add("draggableImageHover");
});
droparea.addEventListener("dragleave", () => {
droparea.classList.remove("draggableImageHover");
});
droparea.addEventListener("drop", (e) => {
e.preventDefault();
const image = e.dataTransfer.files[0];
const type = image.type;
if (
type == "image/png" ||
type == "image/jpg" ||
type == "image/jpeg"
) {
var reader = new FileReader();
// reader.onload = function (event) {
// passImageToCropper(reader.result);
// };
// reader.readAsDataURL(file)
reader.onload = function (event) {
if(reader.result !== null){
passImageToCropper(reader.result);
}
};
if (image) {
reader.readAsDataURL(image);
}
} else {
alert("Invalid File Format!");
}
});
}
如您所见,addEvent 侦听器是:
droparea.addEventListener("drop", (e) => {
e.preventDefault();
const image = e.dataTransfer.files[0];
const type = image.type;
if (
type == "image/png" ||
type == "image/jpg" ||
type == "image/jpeg"
) {
var reader = new FileReader();
// reader.onload = function (event) {
// passImageToCropper(reader.result);
// };
// reader.readAsDataURL(file)
reader.onload = function (event) {
if(reader.result !== null){
passImageToCropper(reader.result);
}
};
if (image) {
reader.readAsDataURL(image);
}
e.stopImmediatePropagation();
} else {
alert("Invalid File Format!");
}
});
Addevent listener Drop 多次触发,我通过一些控制台日志了解到,我该如何解决这个问题?
解决方案
这对我有用,在 else 子句中添加这个 alert :
else {
alert("Invalid File Format!");
e.stopImmediatePropagation();
}
推荐阅读
- karate - 在空手道中调用其他功能文件时如何在读取中传递变量?
- c - UART ESP8266 和 STM32
- python-3.x - 如何在python中安装exe脚本?
- flutter - Flutter - 如何使用 facebook 登录获取用户的位置?
- google-mlkit - 将CameraImage Stream转换为字节或文件?
- javascript - 如何在peggyjs中检查刺痛是否是字母数字
- django - 如何在django_rest_framework APIView中配置ID参数
- reactjs - 如何在 React Native 中使用 Flatlist 进行无限顶部滚动?
- asp.net-mvc - 带有模式部分视图的 ASP.NET Core 服务器端验证
- java - 如何删除重复行并忽略某些文本?