【问题标题】:HTML Drag and Drop, dragover event returns the child element and not the parentHTML拖放,dragover事件返回子元素而不是父元素
【发布时间】:2020-11-01 19:24:03
【问题描述】:

在提供的示例中,当我将任何元素拖到“Category1”上时,console.log 会输出子元素“DIV”而不是父元素“LI”。

任何解决方案都将不胜感激。

document.addEventListener('dragover', function (event) {
        event.stopPropagation();
        event.preventDefault();
        console.log(event.target.tagName);
    }, true);
<ul>
        <li draggable='true'><div draggable="false">Category 1</div> 
        <ul>
            <li draggable='true'> * Item 1 </li>
            <li draggable='true'> *  Item 2 </li>
            <li draggable='true'> *  item 3 </li>
        </ul>
        <li draggable='true'><div draggable="false">Category 2</div> 
        <ul>
            <li draggable='true'> * Item 1 </li>
            <li draggable='true'> *  Item 2</li>
        </ul>
        </li>
    </li>
</ul>

【问题讨论】:

    标签: javascript html jquery drag-and-drop


    【解决方案1】:

    在 EventListener 中使用“drag”而不是“dragover”。

    document.addEventListener('drag', function (event) {
            event.stopPropagation();
            event.preventDefault();
            console.log(event.target.tagName);
    },true);
    
    

    【讨论】:

    • 谢谢,但您的解决方案得到的是移动元素的事件,而不是我拖过的元素的事件。
    【解决方案2】:

    正在考虑使用 FOR 循环来通过 DOM,直到找到 LI。

    function getfirstLI(el)
    {
    for (i = 0; i < 10; i++) {
    if (el.tagName == "LI") return el;
    if (el.tagName == "UL") return null;
    if (el.tagName == "body") return null;
    el = el.parentNode;
    }
    

    【讨论】: