我目前遇到了以下问题:
我需要在dragover发生时创建延迟,然后检查当前的dragover对象是否仍然相同。当它是同一个对象时 - >执行代码。
这是我的代码:
var draggedId = null;
var triggered = false;
function allowDrop(ev) {
draggedId = ev.target.id;
setTimeout(function () {
if (draggedId == ev.target.id && ev.target.id != "" && !triggered) {
triggered = true;
draggedId = "";
ev.preventDefault();
}
}, 2000);
}
function drop(ev) {
ev.preventDefault();
}
function dragLeave(ev) {
draggedId == "";
triggered = false;
}
Allowdrop功能是dragover事件。 ev.preventDefault()允许丢弃不能在那里发生,因为该函数是assync。 有什么想法吗?
谢谢,
的Mathias
答案 0 :(得分:0)
你能解释一下你想要达到的目标吗?我可以更充分地回答这个问题吗?
通常情况下,您无法始终确定丢弃是否有效,您可以做的最好的事情是在您的页面上设置放置区域,让他们根据您可以了解的丢弃情况取消dragover事件。如果你想让你的应用程序使用跨窗口拖动,那么你就不能依赖全局变量来存储有关被拖动内容的信息,而你实际上无法看到拖动内部的内容 - 你只能知道什么是被拖了。因此,如果丢弃可能是可接受的,您需要取消该事件。见this question
我想也许你对dragevents如何传播感到困惑,这是你认为你需要超时的原因?但阻止事件队列以确定是否接受了丢弃,或尝试取消拖动事件后,它已经冒泡到顶部并由浏览器以默认方式处理(这是不接受丢弃)isn'去上班。