簡體   English   中英

中斷拖放范圍

[英]Breaks span in drag & drop

請告訴我。 如果將跨度專門拖動到另一個跨度而不是自由空間,則會發生某種合並(請參閱gif)。 如何解決這個錯誤? 先感謝您。 在此輸入圖像描述

 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> 

您的drop事件是在span而不是包含div上觸發的。 因此,拖動的元素將附加到其拖動到的跨度上。

您可以通過更改行來防止這種情況

ev.target.appendChild(document.getElementById(data)); ev.target.closest('div').appendChild(document.getElementById(data));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM