首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拖放到多个元素问题

拖放到多个元素问题
EN

Stack Overflow用户
提问于 2015-10-13 21:49:36
回答 3查看 198关注 0票数 1

我正在尝试实现一个拖放场景。

我遇到的一个问题是,我需要将一个元素放到外部div上,但事件会在内部div上触发。

这里有一个代码来演示我的问题:

http://codepen.io/anon/pen/KdvboR

代码语言:javascript
复制
<html>
  <head>
    <style>
      .dropDiv {
        height: 100px;
        width: 200px;
        border: 1px solid black;
      }

      .innerDiv {
        height: 100px;
        width: 100px;
        border-right: 1px solid black;
      }


      .drag {
        border: 1px solid green;
      }

      .drop {
        border: 1px solid red;
      }
    </style>
  </head>
  <body>
    <span id="text" draggable="true" ondragstart="drag(event)" ondragend="dragend(event)" class="">Drag Text</span>

    <br>
    <br>

    To Here:
    <div class="dropDiv" ondrop="drop(event)" ondragenter="dragenter(event)" ondragleave="dragleave(event)" ondragover="allowDrop(event)">
      <div class="innerDiv"></div>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script>
      function allowDrop(ev) {
          ev.preventDefault();
      }
      function drag(ev) {
          $(ev.target).addClass('drag');
          ev.dataTransfer.setData('text', ev.target.id);
      }
      function dragenter(ev) {
          $(ev.target).addClass('drop');
      }
      function dragleave(ev) {
          $(ev.target).removeClass('drop');
      }
      function dragend(ev) {
          $(ev.target).removeClass('drag');
      }
      function drop(ev) {
          ev.preventDefault();
          var data = ev.dataTransfer.getData('text');
          ev.target.appendChild(document.getElementById(data));
          $(ev.target).removeClass('drop');
      }
    </script>
  </body>
</html>

我需要的是,每当拖动的元素是在外部div,边界将是红色的。但是当鼠标在内部div上时,只有内部div的边框是红色的。

有什么建议吗?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2015-10-13 22:23:02

执行此示例

代码语言:javascript
复制
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Droppable - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">
  <style>
  #draggable { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
  #droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
  </style>
  <script>
  $(function() {
    $( "#draggable" ).draggable();
    $( "#droppable" ).droppable({
      drop: function( event, ui ) {
        $( this )
          .addClass( "ui-state-highlight" )
          .find( "p" )
            .html( "Dropped!" );
      }
    });
  });
  </script>
</head>
<body>
 
<div id="draggable" class="ui-widget-content">
  <p>Drag me to my target</p>
</div>
 
<div id="droppable" class="ui-widget-header">
  <p>Drop here</p>
</div>
 
 
</body>
</html>

票数 1
EN

Stack Overflow用户

发布于 2015-10-13 22:18:05

您的容器上只有一个div。删除容器,然后重试

代码语言:javascript
复制
<div class="innerDiv" ondrop="drop(event)" ondragenter="dragenter(event)" ondragleave="dragleave(event)" ondragover="allowDrop(event)"></div>
<div class="innerDiv" ondrop="drop(event)" ondragenter="dragenter(event)" ondragleave="dragleave(event)" ondragover="allowDrop(event)"></div>

.innerDiv {
    height: 100px;
    width: 100px;
    border: 1px solid;
    float:left;
}
票数 0
EN

Stack Overflow用户

发布于 2015-10-16 17:53:37

谢谢大家,

最后,我通过检查事件坐标是否在外部div中解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33104465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档