javascript - JS 拖放 : Make a div with specific classname not droppable

标签 javascript html css

我在对我的元素实现拖放操作时遇到了一些问题。我正在制作一个像 trello 这样的看板工具。我的 div 是“列表”,而这些列表中还有其他 div,它们是“卡片”。理想情况下,我可以将卡片放在不同的列表中,但不能将列表放在列表中。但是,现在使用我的代码,我可以将列表拖到列表中。

我想知道如何找到我正在拖动的内容的 html 类,以便我可以使用它来验证。

所以我想要发生的是我可以拖动一个列表,但不能将它放到另一个列表中。但是,我应该能够重新排列包含卡片的列表,并将卡片移动到不同的列表。

谢谢!

这是 Javascript:

function allowDrop(ev) {
    ev.preventDefault();
}

function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
}

function drop(ev) {
    ev.preventDefault();
    if ( ev.target.className == "list")  {
        var data = ev.dataTransfer.getData("text");
        ev.target.appendChild(document.getElementById(data));
    }
}

function allowDrop1(ev) {
    ev.preventDefault();
}

function drag1(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
}

function drop1(ev) {
    ev.preventDefault();
    if ( event.target.className == "listWrap" ) {
        var data = ev.dataTransfer.getData("text");
        ev.target.appendChild(document.getElementById(data));
    }
}
´´´´
And this is a list from the html:
```
<div class="listWrap" ondrop="drop1(event)" ondragover="allowDrop1(event)">
                <div class="list" ondrop="drop(event)" ondragover="allowDrop(event)" draggable="true" ondragstart="drag1(event)" id=list_1 >

                    <div class="card" id=card_1 draggable="true" ondragstart="drag(event)">
                        <p> test </p>
                    </div>
                    <div class=card id=card_2 draggable="true" ondragstart="drag(event)">
                        <p> test 2 </p>
                    </div>
                </div>
            </div>

最佳答案

我修好了!还添加了将列表拖动到另一个列表的列表包装器内并使它们切换位置的功能。

这是新代码:

var dragget;
var source;
var dragged;

function allowDrop(ev) {
    ev.preventDefault();
}

function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id)
    dragget = event.target.className;
    dragged = event.target;
    source = ev.target.parentElement;
}

function drop(ev) {
    ev.preventDefault();
    if ( ev.target.className == "list" && dragget == "card" )  {
        var data = ev.dataTransfer.getData("text");
        ev.target.appendChild(document.getElementById(data));
    }
}

function drop1(ev) {
    ev.preventDefault();
    if ( event.target.className == "listWrap" && dragget == "list" ) {

        var data = ev.dataTransfer.getData("text");
        source.innerHTML = ev.target.innerHTML;
        ev.target.innerHTML = "";
        ev.target.appendChild(dragged);
    }
}

HTML:

<div class="listWrap" ondrop="drop1(event)" ondragover="allowDrop(event)">
                <div class="list" ondrop="drop(event)" ondragover="allowDrop(event)" draggable="true" ondragstart="drag(event)" id=list_1 >

                    <div class="card" id=card_1 draggable="true" ondragstart="drag(event)">
                        <p> test </p>
                    </div>
                    <div class=card id=card_2 draggable="true" ondragstart="drag(event)">
                        <p> test 2 </p>
                    </div>
                </div>
            </div>

关于javascript - JS 拖放 : Make a div with specific classname not droppable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56340967/

相关文章:

javascript - 将新集合添加到现有 mongo 数据库

javascript - 将多个数组插入一个数组形成一个二维数组

javascript - 如何在不使用 .on() 的情况下在悬停期间执行 jQuery 脚本?

javascript - 在 Google Charts 直方图中指定列高

html - IE 11 中的不同 IE5-Quirks-Mode?

javascript - 为什么在 SelectBox 中添加整个数组元素而不是仅添加新元素

javascript - 如何在javascript中删除单词后的所有字符串?

css - 响应式字体媒体查询少循环

javascript - 将一个隐藏的 div 复制到另一个 div

css - 使用 CSS 更改文本颜色