【发布时间】:2015-07-14 01:12:32
【问题描述】:
我有下一个代码:
document.onreadystatechange = function() {
if (document.readyState == "interactive") {
var dropZone = document.getElementById("dropZone");
dropZone.addEventListener("dragover", handleDragOver);
dropZone.addEventListener("drop", handleDrop);
console.log(dropZone);
}
};
问题在于 addEventListener 没有向 dropZone 对象添加任何侦听器。因此,当我在控制台日志中检查 dropZone 对象时,“ondragover”和“ondrop”属性为空。
我尝试使用 readyState “完成”而不是“交互式”,但它也不起作用。当我尝试将此侦听器添加到 body 元素时,它可以正常工作(添加了侦听器并且所有处理功能都可以正常工作)。
我不知道问题出在哪里。所以请任何人给我建议,我应该朝哪个方向看。
【问题讨论】:
-
您的 handleDragOver 和 handleDrop 函数是否阻止了默认值?
-
如何检查属性?
dropZone.ondragover很可能仍然是null但在 Firefox 中,例如在页面检查器视图中的元素旁边有一个小的“ev”框。这些指示元素具有哪些事件侦听器。例如,在 StackOverlow 上document.body有两个mousedown事件和三个click事件,尽管document.body.onclick和document.body.onmousedown都是null。 -
你的页面的 HTML 中有 dropZone 元素吗?或者,它是通过一些代码动态添加的吗?您是否尝试过将事件侦听器添加代码放在页面末尾(没有 readystatechange 代码)?您是否 100% 确定页面中只有一个 id 为 dropZone 的元素?
addEventListener()没有设置ondragover和ondrop所以它们为空是正常的。 -
这可能无法解决您的问题,但使用
document.onreadystatechange不是一个好主意,因为您可以注册超过 1 个侦听器。我建议将其更改为window.onload
标签: javascript drag-and-drop addeventlistener