javascript - 为什么 query-ui 可排序功能无法正常工作?
问题描述
我实现了一个可拖动的复选框下拉列表。如果我使用可排序更改功能获得拖动元素值。但它显示索引值是错误的。例如,在我的情况下,当我将列表元素拖到下拉列表的底部时,它会在控制台中显示索引值(值为 6)。但实际上是错误的。我只有 6 个元素,最终索引为 5。为什么显示错误的索引?
我将在这里给出完整的实现代码。
解决方案
不要检查占位符;它的索引是关闭的,因为原始元素在被删除之前仍然被附加。
考虑以下。
$(function() {
$(".dropdown-menu").sortable({
start: function(event, ui) {
console.log('start', ui.item.index());
ui.item.data('start_pos', ui.item.index());
},
change: function(event, ui) {
console.log('start', ui.item.data('start_pos'), "index", ui.item.index());
},
update: function(event, ui) {
console.log('start', ui.item.data('start_pos'), "index", ui.item.index());
}
});
$(".dropdown-menu").disableSelection();
});
body {
font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
color: #333;
background-color: #fff;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div>
<div class="btn-group show">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">Columns <b class="caret"></b>
</button>
<ul class="dropdown-menu dropdown-menu-right ui-sortable show" id="colsDrop" style="position: absolute; transform: translate3d(-10px, 38px, 0px); top: 0px; left: 0px; will-change: transform;" x-placement="bottom-end">
<li class="ui-sortable-handle">
<div class="checkbox">
<label>
<input checked="" type="checkbox" class="toggle-vis" data-column="Position"> Position
</label>
</div>
</li>
<li class="ui-sortable-handle" style="">
<div class="checkbox">
<label>
<input checked="" type="checkbox" class="toggle-vis" data-column="Name"> Name
</label>
</div>
</li>
<li class="ui-sortable-handle">
<div class="checkbox">
<label>
<input checked="" type="checkbox" class="toggle-vis" data-column="Office"> Office
</label>
</div>
</li>
<li class="ui-sortable-handle">
<div class="checkbox">
<label>
<input checked="" type="checkbox" class="toggle-vis" data-column="Age"> Age
</label>
</div>
</li>
<li class="ui-sortable-handle">
<div class="checkbox">
<label>
<input checked="" type="checkbox" class="toggle-vis" data-column="Start Date"> Start date
</label>
</div>
</li>
<li class="ui-sortable-handle">
<div class="checkbox">
<label>
<input checked="" type="checkbox" class="toggle-vis" data-column="Salary"> Salary
</label>
</div>
</li>
</ul>
</div>
</div>
推荐阅读
- php - 如果端口更改,redis-server 将无法工作
- sql - 当集合中的一个或多个行的条件为真时,如何返回一组行?
- reactjs - react hook useEffect infinite loop despite dependency list
- angular - 如何在同一页面上运行 2 个相同的 Angular 应用程序?
- python - 使用 pyusb 列出 USB 设备不起作用
- bash - 使用 cURL 编辑 GIST
- polymorphism - 即使我已经设置了关系,也为多态关系获取未定义的方法
- c# - 使用 MailKit 将 xlsx 文件附加到电子邮件
- python - 为什么我的张量板在使用 SummaryWriter.add_scalar 时会显示“未找到标量数据”?
- ios - react-native-audio-recorder-player:无法读取未定义的属性“startRecorder”