【问题标题】:Prevent items to drag below cancelled one防止项目拖到已取消的项目下方
【发布时间】:2018-09-28 08:35:18
【问题描述】:

我正在使用 jquery Sortable,它为项目提供拖放功能。
但我想在底部限制一些项目,不想将它拖放到某个地方。所以,我搜索了 API 文档,发现了这个solution,这很好。但我仍然面临一个问题。如下:

Fiddle Link

$(function() {
        $( ".sortable" ).sortable();
        $( ".sortable" ).disableSelection();
    $('.sortable').sortable({ cancel: '.note' });
    });
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<link href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet"/>

<ul class="sortable">

            <li id="item_3">Item 3</li>
            <li id="item_4">Item 4</li>
            <li id="item_5">Item 5</li>

            <p class="note">This is a note only</p> 
   </ul>

如果您运行 jsfiddle,根据功能,我们不能拖放“这只是一个注释”行。但我们可以在这条固定线上上下移动其他项目。

所以,我的问题是
如何防止固定项目停留在底部。我不想让任何项目拖到固定项目下方。?

【问题讨论】:

    标签: jquery jquery-ui jquery-ui-sortable


    【解决方案1】:

    按照您的方式第二次调用 Sortable 是重新初始化它。您需要像这样调用 Sortable:

    $(function() {
      $( ".sortable" ).sortable();
      $( ".sortable" ).disableSelection();
      $('.sortable').sortable("option", "cancel", '.note');
    });
    

    一个问题,cancel 需要一个元素,比如"p",而不是一个类。

    如果您从与选择器匹配的元素开始,则阻止排序。

    另一个问题是&lt;p&gt; 不应该是&lt;ul&gt; 的一部分以保证正确的 HTML 语法。我建议如下:

    $(function() {
      $(".sortable").sortable({
        cancel: "p"
      });
      $(".sortable").disableSelection();
    });
    .sortable {
      list-style-type: none;
      margin: 0;
      padding: 0;
      width: 60%;
    }
    
    .sortable li,
    .sortable p {
      margin: 0 3px 3px 3px;
      padding: 0.4em;
      padding-left: 1.5em;
      font-size: 1.4em;
      height: 18px;
    }
    
    .sortable li span {
      position: absolute;
      margin-left: -1.3em;
    }
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <ul class="sortable">
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
    </ul>
    <div class="sortable">
      <p class="ui-state-default note">This is a Note</p>
    </div>

    这将使便笺看起来像是列表的一部分,但不会以任何方式排序。

    更新

    $(function() {
      $(".sortable").sortable({
        items: "li:not(.note)"
      });
      $(".sortable").disableSelection();
    });
    .sortable {
      list-style-type: none;
      margin: 0;
      padding: 0;
      width: 60%;
    }
    
    .sortable li,
    .sortable p {
      margin: 0 3px 3px 3px;
      padding: 0.4em;
      padding-left: 1.5em;
      font-size: 1.4em;
      height: 18px;
    }
    
    .sortable li span {
      position: absolute;
      margin-left: -1.3em;
    }
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <ul class="sortable">
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
      <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
      <li class="ui-state-default note">This is a Note</li>
    </ul>

    【讨论】:

    • 然后设置一个特定的选项。请参阅示例:jqueryui.com/sortable/#items 所以基本上你想使用带有类的li 来识别你想要允许排序的那些项目,items: "li:not(.note)" 会起作用。
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 2014-12-16
    • 2011-07-05
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    相关资源
    最近更新 更多