jQuery UI可排序:是否可以限制单个元素的可能位置?
我有一个包含需要排序的不同项目的列表。但还有一个额外的转折点:某些元素只允许出现在列表中的特定位置 一个例子(请看):有一个列表,其中包含需要排序的元素foo、bar和baz;但是foo项只允许在顶部或底部 因此,我在寻找以下行为:jQuery UI可排序:是否可以限制单个元素的可能位置?,jquery,jquery-ui,jquery-ui-sortable,Jquery,Jquery Ui,Jquery Ui Sortable,我有一个包含需要排序的不同项目的列表。但还有一个额外的转折点:某些元素只允许出现在列表中的特定位置 一个例子(请看):有一个列表,其中包含需要排序的元素foo、bar和baz;但是foo项只允许在顶部或底部 因此,我在寻找以下行为: 当我开始向下拖动foo并穿过bar和baz之间的空间时,占位符应该跳到baz之后的最后一个位置。当我停止拖动时,foo项应该放在列表的底部 当我开始向上拖动baz并穿过foo时,占位符应该位于foo下面。当我停止拖动时,baz项应该放在foo和bar之间 我是否可以
change
事件来实现这一点?是否可以将回调中的位置更改还原到此事件
或者我的问题还有其他解决方案吗(我真的希望只使用jQuery UI库,这样我就不会使用其他框架/库来寻找解决方案)?使用小部件的
beforeStop
事件,检测占位符的位置,如果不需要,则取消事件
beforeStop: function( event, ui ) {
if(ui.placeholder.index()==2) return false;
}
这里更新了,你不能再把foo拖到位置2了
我知道这不完全是你所问的,但我发现它在功能方面非常接近Vickel的答案几乎完全解决了我的问题。他的解决方案唯一有点“丑陋”的地方是,在拖动当前位置是否有效的过程中没有视觉反馈。因此,我选择了以下解决方案:
beforeStop: function(event, ui) {
if(ui.placeholder.index() == 2) return false;
},
change: function(event, ui) {
if(ui.placeholder.index() == 2) ui.placeholder.addClass('invalid-position');
else ui.placeholder.removeClass('invalid-position');
}
使用此解决方案,每次占位符更改时,我都会检查占位符的位置,每当占位符处于无效位置时,我都会向占位符添加一个类无效位置,如果将其放在该位置,则会将其还原。
基于此无效位置类别,我然后设置占位符的样式以提供视觉反馈(例如,在无效位置时带有红色边框或背景)。只是想知道答案是否有用…Vickel的答案有用。我对它进行了一些扩展,并发布了我的最终解决方案。谢谢你的回答,很抱歉没有提前给出反馈。。。你的回答给我指明了正确的方向,我对它稍加改进。最后的解决方案请看我自己的答案。