addEventListener drop 不触发

Ale*_*lex 9 javascript events drag-and-drop

我正在尝试将放置事件附加到 HTML div:

document.getElementById('sub-main').addEventListener("drop", 
                                     () => {console.log('DROP')});
Run Code Online (Sandbox Code Playgroud)

但它不火。添加用于测试目的的点击事件有效 - 此点击事件触发:

document.getElementById('sub-main').addEventListener("click", 
                                     () => {console.log('Click')});
Run Code Online (Sandbox Code Playgroud)

我读过从返回 falseondragover会有所帮助:

document.getElementById('sub-main').addEventListener("ondragover", 
                                     () => {return false});

document.getElementById('sub-main').addEventListener("drop", 
                                     () => {console.log('Drop')});
Run Code Online (Sandbox Code Playgroud)

但这也不起作用。我尝试设置draggable为 true:

document.body.setAttribute('draggable', true);
Run Code Online (Sandbox Code Playgroud)

但也没有运气!

将事件侦听器记录到控制台并getEventListeners() 显示所有事件,甚至是我选择的任何随机事件名称:

getEventListeners(document.getElementById('sub-main'));
Run Code Online (Sandbox Code Playgroud)

但是 drop 事件仍然没有触发。有任何想法吗?

Tam*_*kar 15

要启用拖动,您首先应该使用dragover事件禁用浏览器的默认行为。

添加这段代码,它将起作用。

document.addEventListener("dragover", function(event) {
  event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)


小智 1

我在 plunker 中进行了一些尝试和错误,得出的结论是,您首先需要在文档上设置 eventListener(不要使用。getElementById('sub-main') 至少会在 plunker 中给出错误),然后在 eventlistener 中指定向哪个目标开火。为了让它检测到它可以被删除,你需要有其他事件监听器,例如:drag、dragstart、dragover、dragleave和dragenter。只需按照他们在 MDN 上所做的操作即可。