【发布时间】:2017-11-17 05:38:36
【问题描述】:
我有两个列表:
<ul class='list_one'>
<li>drag me</li>
<li>drag me</li>
</ul>
<ul class='list_two'>
<li class='first'>top most</li>
<li class='middle'>here i am</li>
<li class='middle'>here i am</li>
<li class='last'>least most</li>
</ul>
我想防止第二个列表中的第一个和最后一个项目被排序或移动。他们将永久留在这些职位上。
问题是当一个占位符阴影被投射时,最后一个项目被推下,离开固定的位置。
jQuery('ul.sq-ranksort-buckets').sortable({
connectsWith: 'ul.sq-ranksort-cards',
items: "li:not(.last_dropped, .suppress_move)",
cancel: ".ui-sortable-disabled, .suppress_move, .do_not_drop, ul.do_not_drop",
over: function( event, ui ) {
if(jQuery('.suppress_move.last:visible').length === 0) {
jQuery(this).addClass('do_not_drop');
jQuery(ui.item).addClass('last_dropped');
console.log('should cancel happen: ' + jQuery('.do_not_drop').length);
} else {
jQuery(this).removeClass('do_not_drop');
jQuery(ui.item).removeClass('last_dropped');
console.log('should cancel happen: ' + jQuery('.do_not_drop').length);
}
}
});
我想知道是否有办法动态重铸通常在排序中取消的内容,由一个类指定,然后有一个事件触发器,就好像您将排序放在不可排序的区域中一样?
这是我必须采用的方法,因为我无法控制原始的可排序调用和选项,也不能简单地用有限的功能重新转换它。
【问题讨论】:
-
那么当
.list_two有4 个项目,并且拖入第5 个时,您是否希望.first和.last保持在它们当前的索引?还是应该允许.last移动,只要它仍然是最后一项? -
@Twisty .last 不应允许事件“转移”,它不应该有机会转移。即使在用于 sortable 的 jQuery UI API 中,在他们的示例中,即使它们禁用某些项目,它们的索引也会在某些拖动场景中改变和移动。
标签: jquery jquery-ui jquery-ui-sortable