如何在Jquery Nestable列表中禁用拖放功能

6

我正在尝试使用jquery nestable创建一个嵌套列表,但希望在整个列表中禁用拖动功能。以下是我的html代码:

<div class="dd" id="nestable">
<ol class="dd-list">
    <li class="dd-item" id="no-drag">
        <div class="dd-handle">
            Foo
            <div class="pull-right action-buttons">
                <a class="blue" href="#">
                    <i class="ace-icon fa fa-pencil bigger-130"></i>
                </a>

                <a class="red" href="#">
                    <i class="ace-icon fa fa-trash-o bigger-130"></i>
                </a>
            </div>

        </div>
        <ol class="dd-list">
            <li class="dd-item" id="no-drag">
                <div class="dd-handle">
                    Bar
                    <div class="pull-right action-buttons">
                        <a class="blue" href="#">
                            <i class="ace-icon fa fa-pencil bigger-130"></i>
                        </a>

                        <a class="red" href="#">
                            <i class="ace-icon fa fa-trash-o bigger-130"></i>
                        </a>
                    </div>

                </div>
                <ol class="dd-list">
                    <li class="dd-item" id="no-drag">
                        <div class="dd-handle">
                            Baz
                            <div class="pull-right action-buttons">
                                <a class="blue" href="#">
                                    <i class="ace-icon fa fa-pencil bigger-130"></i>
                                </a>

                                <a class="red" href="#">
                                    <i class="ace-icon fa fa-trash-o bigger-130"></i>
                                </a>
                            </div>

                        </div>
                    </li>
                </ol>
            </li>
        </ol>
    </li>
</ol>

我的脚本如下所示:
$('.dd').each(function(){
            $(this).nestable({
                maxDepth: 1,
                group: $(this).prop('id')
            });
        });

目前,我能够创建嵌套列表并且用户可以重新排列嵌套列表。我想禁用该功能,但是我无法做到。请给予建议。

4个回答

5

我已经查看了js文件,并发现使用了“dd-handle”类来处理拖放操作。

因此,如果更改句柄的类名,则它将完美地工作。

        $('.nestable').nestable({handleClass:'123'});

完成


5

我遇到过类似的问题,通过使用CSS的pointer-events属性解决了它。

CSS代码:

.drag_disabled{
    pointer-events: none;
}

.drag_enabled{
    pointer-events: all;
}

HTML:

<label class=""><input id="draggable_list" class="" name="draggable_list" type="checkbox" value="false"> <span>Activate Ordering </span></label>

<div id="list" class="drag_disabled dd">
    <ol class="dd-list">
        <li class="dd-item" data-id="Item 1">
            <div class="dd-handle dd-outline dd-anim">
                Text 1
                </div>
            </div>
        </li>
        <li class="dd-item" data-id="Item 3">
            <div class="dd-handle dd-outline dd-anim">
                Text 2
            </div>
        </li>
    </ol>
</div>

JavaScript(只需在复选框上切换类drag_enableddrag_disabled):

$('#list').nestable({maxDepth: 1});

     $('#draggable_list').change(function(){
         $('#list').toggleClass('drag_disabled drag_enabled');
     });

如果列表具有嵌套元素,则此操作将破坏可嵌套列表的展开/折叠功能。 - MohamedSanaulla
@MohamedSanaulla 是正确的,但您可以通过以下方式简单地重新启用这些操作:[data-action="collapse"] {pointer-events: all;} - sousdev

1
您可以设置maxDepth: 0,这不会禁用拖放,但不会阻止对象重新定位。

1
将maxDepth设置为零实际上并不能阻止对象的重新定位。它只能防止从父状态向子状态重新定位对象。然而,从子状态向父状态重新定位仍然是有效的。 - Fatih TAN

0

我有同样的问题。你只需要添加这些CSS代码

.drag_disabled{
      pointer-events: none;
  }
  .drag_enabled{
      pointer-events: all;
  }
  .dd-expand{
    pointer-events: auto;
  }
  .dd-collapse{
    pointer-events: auto;
  }

然后您将JavaScript添加到页脚

$('#nestable02').nestable({maxDepth: 1});

你禁用了除折叠之外的所有指针事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接