我有一个列表,我正在尝试创建一个系统,其中一个人可以将项目从该列表拖动到div
(而不是其他列表),反之亦然。
以下是我的代码:
$(function() {
$( "ul, li" ).disableSelection();
$( "li" ).draggable({
revert:"invalid"});
$( "#droppable" ).droppable({
drop: function( event, ui ) {ui.draggable.remove()}
});
});
#droppable
{
height:150px;
width:750px;
background:rgba(0,200,0,0.3);
display:inline-block;
}
ul
{
border: 1px solid #eee;
width: 142px;
min-height:20px;
height:142px;
list-style-type: none;
margin: 0;
overflow:hidden;
overflow-y:scroll;
padding: 5px 0 0 0;
float: right;
margin-right: 10px;
}
ul li
{
color:red;
border : 1px solid #eee;
margin: 0 5px 5px 5px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.2/jquery-ui.min.js"></script>
<div id="droppable"></div>
<br>
<ul>
<li id="drag">Item1</li>
<li id="drag">Item2</li>
<li id="drag">Item3</li>
<li id="drag">Item4</li>
<li id="drag">Item5</li>
</ul>
尝试运行代码并拖动下拉列表项,包括开箱即用。你会明白我的意思。
问题在于,当我将项目拖出List(ul
)区域时,它不会出现,如果我将它放到一个不可删除的区域,它将恢复为应该列出的列表。如果我把它放在#droppable
dic中,那么它就会从列表中删除但仍然不可见。
我尝试将z-index
的{{1}}和ul
设置为li
,将2
设置为#droppable
,但这没有帮助任
PS。如果项目处于拖动状态并被拖出1
区域,那么它也会消失。它仅在ul
区域中可见。任何帮助将不胜感激。
答案 0 :(得分:0)
此代码存在一些问题 -
允许的父元素&lt; ul&gt;,&lt; ol&gt;或者&lt; menu&gt;元件。虽然没有 不合格的用法,过时的&lt; dir&gt;也可能是父母。
来源:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li
除非有充分的理由不将其作为另一个列表,否则我建议使用列表元素并简单地设置它以删除子弹以进行您需要的任何其他视觉/设计更改。
HTML的无效使用会导致浏览器之间的呈现方式不同,应该避免使用。
如果你必须将它移动到 div 元素,那么我建议从列表元素中复制内部文本或HTML并将其附加到 div - 可能在一个合适的块容器中,如段落( p )。
此方法可以解决您的溢出问题,否则您需要从父列表中删除overflow:hidden样式。
尝试保持原始代码的精神,我已在下面的代码段中解决了这些问题 -
$(function() {
$( "ul, li" ).disableSelection();
$( "li" ).draggable({
helper: "clone",
revert:"invalid"
});
$( "#droppable" ).droppable({
drop: function( event, ui ) {
var dragText = ui.draggable.text();
$(event.target).append($('<p>').text(dragText));
ui.draggable.remove();
event.preventDefault();
}
});
});
#droppable
{
height:150px;
width:750px;
background:rgba(0,200,0,0.3);
display:inline-block;
}
ul
{
border: 1px solid #eee;
width: 142px;
min-height:20px;
height:142px;
list-style-type: none;
margin: 0;
overflow:hidden;
overflow-y:scroll;
padding: 5px 0 0 0;
float: right;
margin-right: 10px;
}
ul li
{
color:red;
border : 1px solid #eee;
margin: 0 5px 5px 5px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.2/jquery-ui.min.js"></script>
<div id="droppable"></div>
<br>
<ul>
<li id="drag">Item1</li>
<li id="drag">Item2</li>
<li id="drag">Item3</li>
<li id="drag">Item4</li>
<li id="drag">Item5</li>
</ul>
答案 1 :(得分:0)
由于现有答案已被接受,我将其保留原样 - 但我已修改此副本以解决OP在评论中的问题,要求该项目保留其“&#39;在 div 容器中删除位置。
$(function() {
$( "ul, li" ).disableSelection();
$( "li" ).draggable({
helper: "clone",
revert:"invalid"
});
$( "#droppable" ).droppable({
drop: function( event, ui ) {
var dragText = ui.draggable.text();
var $dropTarget = $(event.target);
var targetPosition = $dropTarget.offset();
var dropPosition = ui.offset;
var relativePosition = {
left: (dropPosition.left - targetPosition.left),
top: (dropPosition.top - targetPosition.top)
};
$dropTarget.append($('<p>').css({ left: relativePosition.left + 'px', position: 'absolute', top: relativePosition.top + 'px' }).text(dragText));
ui.draggable.remove();
event.preventDefault();
}
});
});
&#13;
#droppable {
height:150px;
width:750px;
background:rgba(0,200,0,0.3);
display:inline-block;
position: relative; /* Added position relative to act as positioning container */
}
ul {
border: 1px solid #eee;
width: 142px;
min-height:20px;
height:142px;
list-style-type: none;
margin: 0;
overflow:hidden;
overflow-y:scroll;
padding: 5px 0 0 0;
float: right;
margin-right: 10px;
}
ul li{
color:red;
border : 1px solid #eee;
margin: 0 5px 5px 5px;
padding: 5px;
font-size: 1.2em;
width: 120px;
}
&#13;
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.2/jquery-ui.min.js"></script>
<div id="droppable"></div>
<br>
<ul>
<li id="drag">Item1</li>
<li id="drag">Item2</li>
<li id="drag">Item3</li>
<li id="drag">Item4</li>
<li id="drag">Item5</li>
</ul>
&#13;