javascript - 防止被拖动的 parent 的 child 点击事件

标签 javascript jquery html css

我有一个这样的 UL 标签:

<ul ondrop="drop(event)" ondragover="allowDrop(event)">
    <li class="item" draggable="true" ondragstart="dragStart(event)" ondrag="dragging(event)">
        <div class="product-infos">
            <a href="javascript:;"></a>
        </div>
    </li>
</ul>

我希望能够拖动整个 LI 元素并拖动到另一个 UL 元素。使用 JavaScript 代码:

<script>
    function allowDrop(event) {
        event.preventDefault();
    }
    function dragStart(event) {
        event.dataTransfer.setData("Text", event.target);
    }
    function dragging(event) {

    }
    function drop(event) {
        event.preventDefault();
        var data = event.dataTransfer.getData("Text");
        event.target.appendChild(document.getElementById(data));
    }
</script>

问题是,有时用户点击“div”元素,其他人点击“a”元素。所以,大多数时候,拖动失败是因为我将错误的子项附加到 UL 元素。 我收到错误:

Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.

我希望能够将整个元素拖动到我点击的任何地方。我希望有一个解决方案。

最佳答案

使用 jquery ui sortable,我在你的 html 中留下了 ondrag 等,但你不需要它们

$(function() {
     $(function() {
         $( "ul" ).sortable({
            connectWith: "ul"
         });
         $( "ul").sortable({
            connectWith: "ul",
            dropOnEmpty: false
         });

      });
  });
ul{background-color:red;}
li{background-color:blue;}
a{background-color:green;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<ul ondrop="drop(event)" ondragover="allowDrop(event)">ul
    <li class="item">li
        <div class="product-infos">div
            <a href="javascript:;" draggable="true" ondragstart="dragStart(event)" ondrag="dragging(event)">link</a>
        </div>
    </li>
  <li class="item">li
        <div class="product-infos">div
            <a href="javascript:;" draggable="true" ondragstart="dragStart(event)" ondrag="dragging(event)">link</a>
        </div>
    </li>
</ul>
<ul ondrop="drop(event)" ondragover="allowDrop(event)">ul
    <li class="item">li
        <div class="product-infos">div
            <a href="javascript:;" draggable="true" ondragstart="dragStart(event)" ondrag="dragging(event)">link</a>
        </div>
    </li>
  <li class="item">li
        <div class="product-infos">div
            <a href="javascript:;" draggable="true" ondragstart="dragStart(event)" ondrag="dragging(event)">link</a>
        </div>
    </li>
</ul>

关于javascript - 防止被拖动的 parent 的 child 点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987973/

相关文章:

javascript - 如何从 MERN 技术栈中的数据库中检索最后添加的记录?

jquery - bxslider无限循环向左滚动到第一张幻灯片而不是向右循环

javascript - 带有 jquery 的动态 css 属性(滚动)

javascript - Node JS 重定向

javascript - 如何在 JavaScript 中对值进行排序?

javascript - 使语义 UI 搜索选择下拉滚动到单击时选择的项目?

html - 仅使用 CSS 避免多个粘性 div 相互重叠(无 javascript)

html - 响应式花车与经典花车混为一谈

javascript - Postman 测试使用 HTTP 状态代码的 switch 语句

javascript - 当我打开模式时添加下一个和上一个按钮