28

我已经实现了 jQueryUI 可排序列表,它工作得非常好。在某个时间点,我希望禁用进一步排序并保持项目顺序不变,而用户无法更改它。

它尝试了这样的事情:

$('.sortable').sortable('disable'); 

和这个:

$('.sortable').each(function() { $(this).sortable('disable'); });

和:

$('.sortable').disable(); 

和:

$('.sortable').cancel(); 

以及所有这些的各种组合。都没有成功。

谁能告诉 ne The Right Way ™ 去做吗?

更新:我正在使用 jQuery 1.3.2 和 jQueryUI 1.7.2。一个可能的问题是我在页面上有两个独立的可排序列表,所以我有 sortable1 和 sortable2 类。我实际上在做:

$('.sortable2').sortable('disable'); 

Update2:问题是我使用.sortable 而不是#sortable。现在一切正常。

4

7 回答 7

38
$(ui.sender).sortable( "disable" )
于 2010-12-29T13:45:11.053 回答
13

我正在调试过程中:

  1. 单击以使可排序
  2. 完成(可排序禁用)
  3. 单击以再次排序无效
  4. 解决方案/解决方法:将禁用选项显式设置为 false

http://plnkr.co/edit/uX6cNNiYoejYqwQicEhg?p=preview

  function sortableEnable() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).sortable( "option", "disabled", false );
    // ^^^ this is required otherwise re-enabling sortable will not work!
    $( "#sortable" ).disableSelection();
    return false;
  }
  function sortableDisable() {
    $( "#sortable" ).sortable("disable");
    return false;
  }

希望有帮助。

于 2014-02-12T12:39:15.923 回答
5

谢谢迈克尔

我为可以排序或可编辑的列表制作了一个版本。

至少对我很有用!

    function sortableEnable() {
        $( "ul" ).sortable();
        $( "ul" ).sortable( "option", "disabled", false );
        $( "li" ).attr("contentEditable","false");
        $( "li" ).css("cursor","move");
        return false;
    }

  function sortableDisable() {
        $( "ul" ).sortable("disable");
        $( "li" ).attr("contentEditable","true");
        $( "li" ).css("cursor","default");
        return false;
    }

    $(function() {
        sortableEnable();
    });
于 2014-09-21T03:10:54.730 回答
4

虽然我之前的建议帖子很有用,但它们并没有解决我想要实现的目标。我想打开和关闭跨多个区域的可排序,并添加使内容再次可选择的功能。

这是我使用的代码:

function AddSortable() {

    $("ul").sortable({
        connectWith: "ul",
        disabled: false
    }).disableSelection();  

    return false;
};

function RemoveSortable(){

    $("ul").sortable({ 
        disabled: true 
    }).enableSelection();   

    return false;
}
于 2014-11-05T11:44:17.690 回答
3

如果您想禁用所有可排序(如我需要的那样),那么您可以使用可排序类“ui-sortable”作为选择器。

例如

$(".ui-sortable").sortable("enable");
$(".ui-sortable").sortable("disable");
于 2018-04-06T11:51:05.873 回答
2

$( ".selector" ).sortable( "disable" );

来自http://api.jqueryui.com/sortable/#option-disabled

于 2013-08-27T17:52:38.977 回答
2

要禁用sortable(),您可以使用

$(".sortable").sortable("disable");

单击带有 id 的按钮来切换启用/禁用toggleButton

$('#toggleButton').click(function() {
    //check if sortable() is enabled and change and change state accordingly
  // Getter
  var disabled = $(".sortable").sortable( "option", "disabled" );
  if (disabled) {
    $(".sortable").sortable( "enable" );
  }
  else {
    $(".sortable").sortable("disable");
  }
});
于 2017-12-29T05:46:58.563 回答