【问题标题】:JQuery UI sortable - ConnectWith - Disable One ColumnJQuery UI 可排序 - ConnectWith - 禁用一列
【发布时间】:2012-04-22 20:45:54
【问题描述】:

我有 2 个 UL 列表,如下所示。我希望能够从#sortable1 克隆到现在可以工作的#sortable2 中,但是问题是#sortable1 可以拖放到自身中,这是我不想要的。

#sortable1 应该是一个静态列表,只允许将项目拖到#sortable2 中并作为结果进行克隆。

提前致谢,

<ul id="sortable1">
    <li class="ui-state-default">Item 1</li>
    <li class="ui-state-default">Item 2</li>
    <li class="ui-state-default">Item 3</li>
    <li class="ui-state-default">Item 4</li>
    <li class="ui-state-default">Item 5</li>
</ul>

<ul id="sortable2">
    <li class="ui-state-highlight">Item A</li>
    <li class="ui-state-highlight">Item B</li>
    <li class="ui-state-highlight">Item C</li>
    <li class="ui-state-highlight">Item D</li>
    <li class="ui-state-highlight">Item E</li>
</ul>

    $(function() 
    {
       $("#sortable1").sortable(
       {  
          helper      : "clone",
          connectWith : "#sortable2",
          start       : function(event,ui)
          {
             $(ui.item).show();
             clone    = $(ui.item).clone();
             before   = $(ui.item).prev();
             position = $(ui.item).index();
          },
          stop        : function(event, ui)
          {
             if (position == 0) $("#sortable1").prepend(clone);
             else before.after(clone);
          }
       });

      $("#sortable2").sortable();
});

【问题讨论】:

    标签: jquery jquery-ui drag-and-drop jquery-ui-sortable


    【解决方案1】:

    您可以使用 beforeStop 事件取消 #sortable1 上的删除

    $(function()
    {
       $("#sortable1").sortable(
       {  
          helper      : "clone",
          connectWith : "#sortable2",
          start       : function(event,ui)
          {
             $(ui.item).show();
             clone    = $(ui.item).clone();
             before   = $(ui.item).prev();
             position = $(ui.item).index();
          },
          beforeStop  : function(event, ui)
           {
              if($(ui.item).closest('ul#sortable1').length>0)
              $(this).sortable('cancel');                                 
           },
          stop        : function(event, ui)
          {
             if (position == 0) $("#sortable1").prepend(clone);
             else before.after(clone);
          }
       });
    
      $("#sortable2").sortable();
    });
    

    【讨论】:

    • 最好将cancel* 放入receivestop 回调中以更安全。文档明确指出“在停止和接收回调函数中很有用。”在其他事件期间取消排序会在某些情况下引发错误...
    【解决方案2】:

    您可以将“containment”选项设置为仅包含 sortable2 列表,如下所示。

    $("#sortable1").sortable( 
       {   
          helper      : "clone", 
          connectWith : "#sortable2",
           containment: "#sortable2",
          .....
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多