Я пытаюсь реализовать пипетку на <div>
как компонент Svelte. Я пробовал каждую комбинацию preventDefault
, но браузер по-прежнему загружает удаленный файл, а не передает его компоненту.
<script>
function handleDrop(event) {
event.preventDefault();
console.log("onDrop");
}
function handleDragover(event) {
console.log("dragOver");
}
</script>
<style>
.dropzone {
display: block;
width: 100vw;
height: 300px;
background-color: #555;
}
</style>
<div class="dropzone" on:drop|preventDefault={handleDrop}
on:dragover|once|preventDefault={handleDragover}></div>
Я пробовал с и без event.preventDefault();
в функциях обработчика. Также пробовал с событием on:dragenter
и различными комбинациями модификаторов, то есть с stopPropagation
. Браузер по-прежнему открывает удаленный файл. Что я делаю неправильно? Спасибо!
(ОБНОВЛЕНИЕ) ИСПРАВЛЕНИЕ:
Хорошо, виновником был модификатор |once
. После удаления из on:dragover
в <div>
все работает отлично, за исключением того, что событие dragover
происходит непрерывно при перетаскивании через div. event.preventDefault();
внутри функций обработчика не требуется, так как модификатор |preventDefault
работает правильно. Вот код (для краткости пропущен <style>
):
<script>
function handleDrop(event) {
console.log("onDrop");
}
function handleDragover(event) {
console.log("onDragOver");
}
</script>
<div class="dropzone" on:drop|preventDefault={handleDrop}
on:dragover|preventDefault={handleDragover}></div>
Пока не отправляю это как ответ, потому что я хотел бы выяснить, почему я не могу использовать модификатор |once
для события dragover
, что было бы полезно для моего приложения. Спасибо!