javascript - 在 React 中拖动 Div 中的图像时如何防止在新选项卡中打开
问题描述
我已通过单击成功实现添加多个图像browser button
。我的问题是当我想拖动图像/图像时。它会打开一个新选项卡。如何防止它打开?我已经放e.preventDefault()
了,但它还在打开。
Codesandbox 在这里 点击这里
<Paper elevation={4} className={classes.mainContainer}>
<div
className={classes.dropzone}
style={{
border: "2px dashed #000000"
}}
onDragOver={(e) => e.preventDefault()}
onDrop={(e) => uploadImage(e.currentTarget.files)}
>
<div>
</div>
<div>
<h3 className={classes.dragHereText}>Drag & Drop Images here</h3>
<p className={classes.or}>or</p>
<Button
size="small"
variant="contained"
component="label"
color="primary"
>
<input
type="file"
accept="image/*"
multiple
className={classes.uploadInput}
onChange={(e) => uploadImage(e.currentTarget.files)}
/>
Browse files
</Button>
</div>
</div>
</Paper>
解决方案
首先,您还需要在 onDrop 处理程序上防止默认设置。此外,来自 onDrop 的事件与 onChange 事件不同,因此您需要以不同的方式处理它。这是一个例子:
const handleDrop = (e) => {
// Note: preventDefault is on nativeEvent
e.nativeEvent.preventDefault()
if (!e) return;
// Note: files are under nativeEvent.dataTransfer
const files = e.nativeEvent.dataTransfer.files;
const fileList = Array.from(files);
const images = fileList.map((image) => ({
imageName: image.name,
imageFile: image
}));
console.log(images);
};
并像这样传递事件:
<div
className={classes.dropzone}
style={{
border: "2px dashed #000000"
}}
onDragOver={(e) => e.preventDefault()}
onDrop={(e) => handleDrop(e)}
>
推荐阅读
- php - Twilio 通知服务短信批量与图像
- android - 注销方法重复
- angular - Angular 请求忽略了 HttpPatch
- neo4j - 在 Neo4j Graphql Apollo 服务器类型定义中如何添加带空格的名称?
- html - 需要帮助从 HTML 获取表格
- mysql - cannot drop a foreign key in mySQL
- git - Resolving a merge conflict on GitHub
- python-3.x - 如何将 Tkinter 条目框中的 StringVar() 放入 re.compile 中?
- charts - 带有聚合数据点的折线图仪表板
- scala - Scala:关于将 HList 转换为 List 的无形问题