addEventListener不会向元素添加侦听器

时间:2015-07-14 01:12:32

标签: javascript drag-and-drop addeventlistener

我有下一个代码:

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元素时,它的工作正常(添加了监听器并且所有处理函数都有效)。

我无法弄清问题是什么。所以请任何人给我建议我应该朝哪个方向发展。

1 个答案:

答案 0 :(得分:0)

这将尝试查找dropZone元素,如果尚未加载,请在DOM完全加载后再试一次。这应该适用于您的脚本(头部,正文开始,正文结束,外部文件,异步加载...)

function activateDropZone() {
    var dropZone = document.getElementById("dropZone");
    if (dropZone) {
        dropZone.addEventListener("dragover", handleDragOver, false);
        dropZone.addEventListener("drop", handleDrop, false);
    } else document.addEventListener("DOMContentLoaded", activateDropZone, false);
}

function handleDragOver(e) {
    e.preventDefault();
    document.getElementById("dropZone").style.backgroundColor = "purple";
}

function handleDrop(e) {
    e.preventDefault();
    document.getElementById("dropZone").style.backgroundColor = "violet";
    document.getElementById("draggable").style.visibility = "hidden";
}

activateDropZone();
DIV {float: left; width: 200px; height: 200px; background-color: blue; color: white;}
DIV:last-of-type {width: 100px; height: 100px; background-color: red;}
<DIV ID="dropZone">dropzone</DIV>
<DIV ID="draggable" draggable="true">draggable</DIV>