当 jQueryUI 可排序列表处于拖动操作的中间时,有没有办法强制 jQuery 更新占位符的位置,即使用户只是水平移动鼠标?(jQuery 对垂直排序的命中测试似乎只在鼠标垂直移动时才有效。)
如果没有文档化的解决方案可用,无文档的或 hacky 的解决方案涉及到可排序、可拖动等的内部结构,可以作为最后的手段。
这里有更多信息:
如果您将一个项目拖到垂直 jQueryUI 可排序列表的右侧,除非您向上或向下移动鼠标,否则列表不会排序。一旦你向上或向下移动鼠标(甚至只是 1px!),列表就会突然排序。示例位于http://jsfiddle.net/f3Lhg/并摘录如下。
这可能看起来像一个极端情况,但当连接的列表从一个列表横向拖动到另一个列表时,它实际上很常见。即使整个拖动不是完全水平的,前 30px-100px 也可能是,导致不可预测的拖动行为和糟糕的用户体验。即使连接列表出现更多问题,您也可以通过从列表中拖出并从侧面返回列表来轻松地使用单个列表进行重现。
问题不是特定于浏览器的。我测试过的所有浏览器的行为都是相同的。此外,添加tolerance
选项并不能解决问题。
这是 jQueryUI 错误还是预期行为?是否有已知的解决方法?
顺便说一句,在我的应用程序中,我已将列表连接到右侧,因此我无法使用该{axis:'y'}
选项,因为这将阻止拖动到连接列表。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.js"></script>
<style type="text/css">
.sortable { list-style-type: none; width: 400px; }
.sortable li { margin: 5px 0; padding: 30px; border: 1px solid #999; }
.sortable li.placeholder { margin: 0; height: 4px; border: 0; padding: 0; background-color: #800; }
</style>
<script type="text/javascript">
$(document).ready(function () {
$('.sortable').sortable({
placeholder: 'placeholder'
}).disableSelection();
});
</script>
</head>
<body>
<ul class="sortable">
<li>Item #1</li>
<li>Item #2</li>
<li>Item #3</li>
<li>Item #4</li>
<li>Item #5</li>
</ul>
</body>
</html>