Jquery-ui Sortable with js list maker from array 无法正常工作

Posted

技术标签:

【中文标题】Jquery-ui Sortable with js list maker from array 无法正常工作【英文标题】:Jquery- ui Sortable with js list maker from array not working properly 【发布时间】:2021-01-28 00:27:35 【问题描述】:

所以我正在尝试实现一个可排序的列表。但是,该列表是使用 javascript 从数组中生成的。这个数组来自后端c#。

这是我的可排序 jquery -


       $('.sortable-list').sortable(
            connectWith: '.sortable-list',
            update: function (event, ui) 
                var changedList = this.id;
                var order = $(this).sortable('toArray');
                var positions = order.join(';');
                success: writeCategories(positions);
                console.log("positions written");
            ,

        );

这是我的生成列表的 JavaScript 函数...


    function makecategories(array) 
            // Create the list element:
            var list = document.createElement('ul');
            list.id = "boo";
            list.className = "sortable-list ui-sortable";

            for (var i = 0; i < array.length; i++) 
                // Create the list item:
                var item = document.createElement('li');
                item.id = i + 1;
                item.className = "ui-sortable-handle";
                item.style = '"margin: 1px; width: 130px; padding: 2px; vertical - align: middle;"';


                // Set its contents:
                item.appendChild(document.createTextNode(array[i]));

                // Add it to the list:
                list.appendChild(item);
            

            // Finally, return the constructed list:
            return list;
        

这是我从后端获取数组并调用我的 JS 函数的方法

     var categories = <%= this.javaSerial.Serialize(this.Menus) %>;

        //alert(categories[3]);
        document.getElementById('categories').appendChild(makecategories(categories));

这是我的 html


    <div id="categories">
    </div>

这是我得到的结果-


    Hen
    Dog
    Cat

但是这个列表是不可排序的。在这里的任何帮助将不胜感激。

这是我尝试过的-


    <div id="categories">
        <ul class="sortable-list">
            <li id="1"> Food </li>
            <li id="2"> Drinks </li>
        </ul>
    <div>

这给了我一个结果-


    Food
    Drinks
    
    Hen
    Dog
    Cat

其中食物和饮料列表是可排序的,而母鸡猫列表是不可排序的。

请随时向我询问更多可能需要的信息。

【问题讨论】:

在 sortable 中,您引用 success,不确定您要使用它做什么。 哦,有一次,我得到了排序列表,我从后端调用函数 writeCategories() 并传递排序后的数组位置。该函数将排序后的数组写入json文件 你能指出你到底面临什么问题,因为我在小提琴中试过你的代码,它似乎工作。 fiddle @sandeepjoshi 当我从 c# 中提取数组时,它是不可排序的!但是 Twisty 帮我解决了这个问题。所以,谢谢 【参考方案1】:

考虑下面的例子。

$(function() 
  function makeSortList(arr, obj) 
    if (obj == undefined) 
      obj = "body";
    
    obj = $(obj);
    var list = $("<ul>", 
      id: "boo",
      class: "sortable-list"
    );

    $.each(arr, function(i, v) 
      $("<li>", 
        id: i + 1
      ).html(v).css(
        margin: "1px",
        width: "130px",
        padding: "2px",
        verticalAlign: "middle"
      ).appendTo(list);
    );

    list.appendTo(obj).sortable(
      connectWith: '.sortable-list',
      update: function(e, ui) 
        var changedList = $(this).attr("id");
        var order = $(this).sortable('toArray');
        var positions = order.join(';');
        //success: writeCategories(positions);
        console.log("positions written", positions);
      
    );

    return list;
  

  makeSortList(["Cat 1", "Cat 2", "Cat 3"], "#categories");
);
.sortable-list 
  list-style-type: none;
  margin: 0;
  padding: 0;
<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>

<div id="categories"></div>

您可以看到这会从 Array 项创建 List,然后在添加后初始化 Sortable。

【讨论】:

天哪!这是天才,谢谢:)

以上是关于Jquery-ui Sortable with js list maker from array 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery-UI Sortable 控制占位符高度

jquery-ui sortable - 在列表之间移动任务

jquery-ui sortable - 拖动时隐藏原始列表隐藏被拖动项

React 导入 Jquery-Ui 可排序

jquery ui的sortable拖动克隆问题

jQuery-UI 可拖动和可排序