Jquery ui jQuery UI Sortable-错误:无法在初始化之前调用Sortable上的方法;试图调用方法';禁用';

Jquery ui jQuery UI Sortable-错误:无法在初始化之前调用Sortable上的方法;试图调用方法';禁用';,jquery-ui,jquery-ui-sortable,Jquery Ui,Jquery Ui Sortable,我有一个jqueryui可排序列表元素,它是从Ajax请求动态填充的 目前,工作流程正在运行 用户单击按钮,列表将按指定设置填充和排序 用户点击另一个按钮, 现有列表元素被jQuery.empty()调用擦除 新的数据值插入到新的列表元素中,并附加到列表中 可排序列表通过$(#Sortable)刷新 给定一个可排序列表对象$(“#avail_list”)。可排序(…),我希望禁用特定列表元素的可拖动属性,并根据其他元素中的现有值将不透明度设置为0.5 为此,我有以下功能: var disabl

我有一个jqueryui可排序列表元素,它是从Ajax请求动态填充的

目前,工作流程正在运行

  • 用户单击按钮,列表将按指定设置填充和排序
  • 用户点击另一个按钮,
  • 现有列表
  • 元素被
    jQuery.empty()
    调用擦除
  • 新的数据值插入到新的
  • 列表元素中,并附加到
    列表中
  • 可排序列表通过$(#Sortable)刷新
  • 给定一个可排序列表对象
    $(“#avail_list”)。可排序(…),我希望禁用特定列表元素的可拖动属性,并根据其他元素中的现有值将不透明度设置为0.5

    为此,我有以下功能:

    var disabled = [];
    var appendString = ""
    if (avail.length > 0) {
      for (var i = 0; i < avail.length; i++) {
    
        //check if current list element exists in existing value list. True results
        //in grayed out and non-draggable element
        compareMatch = checkMatch(avail[i], compare);
    
        if (compareMatch)
          disabled.push(list + "open_" + avail[i].id);
    
    
        appendString += "<li id = "+ list + "open_" + avail[i].id + 
          " class = 'avail_list_element'><img class = 'logo' src = /static/images/vendor_logo/" + avail[i].icon + " /></li>"
      }
    
      $("#avail_list").append(appendString);
    
    } 
    
    $("#avail_list").sortable("refresh");   
    
    if (disabled.length > 0)
        disableDraggable(disabled);
    
    function disableDraggable(elements){
      for (var i = 0; i < elements.length; i++) {
        console.log(elements[i])
        $("#" + elements[i]).sortable("disable");
        $("#" + elements[i]).fadeTo("fast", 0.5);
      }
    }
    
    由于我在禁用元素之前在可排序列表上调用了
    refresh
    ,因此如何才能不初始化
    sortable
    对象?

    在任何元素上调用.sortable()会使该元素的子元素可排序。这并不意味着子级也用.sortable()初始化。它们只是可排序容器的一部分,可以四处拖动

    由于您正在对子元素调用.sortable('disable'),它将给出一个错误,因为对父元素而不是子元素调用了.sortable()。你禁用的方式也是不正确的

    使用将这些元素从排序中排除。在初始化排序表的任何位置添加此选项

    $("#avail_list").sortable({ 
        cancel: ".disable-sort" 
    });
    
    并将该类添加到要禁用的元素中

    function disableDraggable(elements){
      for (var i = 0; i < elements.length; i++) {
        $("#" + elements[i]).addClass("disable-sort");
        $("#" + elements[i]).fadeTo("fast", 0.5);
      }
    }
    
    功能不可禁用拖动(元素){
    对于(var i=0;i
    您在
    $(“#avail_list”)
    上调用sortable,但是您的元素数组将包含类似
    $(“#list open_1”)
    的内容,尽管我不确定,因为我不知道
    list
    变量设置为什么。也许可以尝试添加
    $(“#”+元素[i])。可排序(“刷新”)在尝试禁用之前?
    
    function disableDraggable(elements){
      for (var i = 0; i < elements.length; i++) {
        $("#" + elements[i]).addClass("disable-sort");
        $("#" + elements[i]).fadeTo("fast", 0.5);
      }
    }