使用最新的jQuery UI,将元素从一个列表移动到另一个列表时,拖放功能无法正常工作。我想将元素从一个列表拖到另一个列表并用另一个列表替换drooped元素,问题是jquery UI替换了元素但是它将它移动到列表的底部,它没有将它保持在它的位置被放弃了。
<head>
<style>
#list1{
float:left;
width: 200px;
margin-right: 20px;
}
#list2{
float:left;
width: 200px;
}
.element1{
line-height:25px;
width: 200px;
margin-bottom:5px;
margin-top:5px;
background-color:#ededed;
}
.element2{
line-height:25px;
width: 200px;
margin-bottom:5px;
margin-top:5px;
background-color:#ffeded;
}
.highlight{
border: 1px dashed #999999;
color: #333333;
height: 25px;
background-color: #faffd6;
}
</style>
</head>
<body class="">
<div id="wrapper">
<div id="list1">
<div class="element1">Element 1</div>
<div class="element1">Element 2</div>
<div class="element1">Element 3</div>
<div class="element1">Element 4</div>
<div class="element1">Element 5</div>
<div class="element1">Element 6</div>
</div>
<div id="list2">
<div class="element2">Element 1</div>
<div class="element2">Element 2</div>
<div class="element2">Element 3</div>
<div class="element2">Element 4</div>
<div class="element2">Element 5</div>
<div class="element2">Element 6</div>
</div>
</div>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>
<script>
$(window).load(function () {
$("#list1").sortable({
revert: true,
placeholder: "highlight",
});
$("#list2").sortable({
revert: true,
placeholder: "highlight",
});
$( ".element1" ).draggable({
connectToSortable: "#list2",
revert: "invalid",
stop: function( event, ui ) {
$(this).replaceWith('<div class="element1">Element 99</div>');
}
});
});
</script>
答案 0 :(得分:0)
你遇到的问题是你有两个不同的事件而你只能抓住其中一个。
你的问题是,在第一个场景中,拖动的元素位置(DOM-wise)是列表的最后一个元素,当你放弃它时,你会得到动画将它放在正确的位置(高亮元素是地方)然后有一个开关。如果你改变那些应该在这些元素之间改变的函数将不知道要切换哪些元素。
解决此问题的方法是转到“droppable”元素 - 您将项目放入的列表。使用deactivate
(sortable
)的#list2
事件来运行任何你想要的东西 元素被放置在正确的位置。
$("#list2").sortable({
revert: true,
placeholder: "highlight",
deactivate: function(event, ui) {
$(ui.item).replaceWith('<div class="element1">Element 99</div>');
}
});
请注意event.toElement
而不是this
的使用情况,因为当前范围中的this
是列表元素,而不是拖动的元素。不要忘记从可拖动元素中删除stop
事件的代码。