javascript - 在拖放中中断跨度

标签 javascript html css

请告诉我。如果您专门将一个跨度拖到另一个跨度而不是自由空间,则会发生某种合并(参见 gif)。 如何修复此错误? 先感谢您。 enter image description here

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

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

function drop(ev) {
  ev.preventDefault();
  var data = ev.dataTransfer.getData("text");
  ev.target.appendChild(document.getElementById(data));
}
#div1,
#div2 {
  float: left;
  width: 100%;
  height: 100%;
  margin: 10px;
  padding: 10px;
  display: inline-block;
}
.drop {
width:100px;
height:50px;
display:block;
border:1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div style="background:#fafafa;width:100%;height:440px;padding-top:10px;">
  <div style="text-align:center;width:49%;height: 100%;display:inline-block;border-right:1px solid #e0e0e0;">
    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
      <span class="drop" draggable="true" ondragstart="drag(event)" id="drag1" data-orderID="1">SPAN 1</span>
    </div>
  </div>
  <div style="text-align:center;width:49%;height: 100%;display:inline-block;">
    <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">
      <span class="drop" draggable="true" ondragstart="drag(event)" id="drag2"  data-orderID="2">SPAN 2</span>
    </div>
  </div>
</div>

最佳答案

如果您不想在跨度内放置,可以阻止从该节点放置。 <span class="drop" ondrop="event.stopPropagation();"这可确保包含 div 的处理程序不会被调用。

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

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

function drop(ev) {
  ev.preventDefault();
  var data = ev.dataTransfer.getData("text");
  ev.target.appendChild(document.getElementById(data));
}
#div1,
#div2 {
  float: left;
  width: 100%;
  height: 100%;
  margin: 10px;
  padding: 10px;
  display: inline-block;
}
.drop {
width:100px;
height:50px;
display:block;
border:1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div style="background:#fafafa;width:100%;height:440px;padding-top:10px;">
  <div style="text-align:center;width:49%;height: 100%;display:inline-block;border-right:1px solid #e0e0e0;">
    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
      <span class="drop" draggable="true" ondragstart="drag(event)" id="drag1" data-orderID="1">SPAN 1</span>
    </div>
  </div>
  <div style="text-align:center;width:49%;height: 100%;display:inline-block;">
    <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">
      <span class="drop" ondrop="event.stopPropagation();" draggable="true" ondragstart="drag(event)" id="drag2"  data-orderID="2">SPAN 2</span>
    </div>
  </div>
</div>

关于javascript - 在拖放中中断跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55103376/

相关文章:

javascript - 为什么 extjs 按钮处理程序不起作用

html - header 未使用 CSS 更改样式,但其他 div 是

jquery - 如何通过 jquery 为选择器添加样式?

google-chrome - 透明边框上的圆 Angular 在 Chrome 中使半透明度加倍

css - 如何减小 Office ui 结构中复选框和单选按钮的大小

javascript - chrome 扩展随页面加载而打开

javascript - 在 Forever 中使用 ESM 运行脚本

javascript 柯里化(Currying)

javascript - 类型错误 : res is not a function

html - 图像在旋转木马中被拉伸(stretch)