Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery UI可排序:是否可以限制单个元素的可能位置?_Jquery_Jquery Ui_Jquery Ui Sortable - Fatal编程技术网

jQuery UI可排序:是否可以限制单个元素的可能位置?

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之间 我是否可以

我有一个包含需要排序的不同项目的列表。但还有一个额外的转折点:某些元素只允许出现在列表中的特定位置

一个例子(请看):有一个列表,其中包含需要排序的元素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的答案有用。我对它进行了一些扩展,并发布了我的最终解决方案。谢谢你的回答,很抱歉没有提前给出反馈。。。你的回答给我指明了正确的方向,我对它稍加改进。最后的解决方案请看我自己的答案。