[英]Replacing an element using jquery ui with drag and drop doesn't work properly
使用最新的jQuery UI,将元素从一个列表移动到另一个列表时,拖放功能无法正常工作。 我想将元素从一个列表拖到另一个列表中,然后将下垂的元素替换为另一个列表,问题是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>
您遇到的问题是您有两个不同的事件,而您仅捕获其中之一。
您的问题是,在第一种情况下,拖动的元素位置(在DOM方向上)是列表的最后一个元素,当您将其拖放时,会发生的事情是使动画将其放置在正确的位置(其中高亮元素是地方),然后有一个开关。 如果更改该功能,则应在这些元素之间更改的功能将不知道要切换哪个元素。
解决此问题的方法是转到“可放置”元素-您将项目放入其中的列表。使用sortable
( #list2
)的deactivate
事件在元素放置在正确位置后运行所需的任何内容。
$("#list2").sortable({
revert: true,
placeholder: "highlight",
deactivate: function(event, ui) {
$(ui.item).replaceWith('<div class="element1">Element 99</div>');
}
});
需要注意的使用event.toElement
,而不是this
,因为this
在当前范围列表元素,而不是拖动的元素。 不要忘记从可拖动元素中删除stop
事件的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.