代码之家  ›  专栏  ›  技术社区  ›  bjork24

jquery ui:Sortable(“ToArray”)返回空数组

  •  21
  • bjork24  · 技术社区  · 15 年前

    这让我很为难。以下代码返回“、、、、”:

    <script type="text/javascript">
    $(function() {
        $('#listB').sortable({
            connectWith: '#listA',
            update: function(event, ui) {
                var result = $(this).sortable('toArray');
                alert(result);
                }
        });
        $('#listA').sortable({
            connectWith: '#listB'
        });
    });
    </script>
    
    <div id="boxA">
        <ul id="listA" class="myList">
            <li value="1">Item A</li>
            <li value="2">Item B</li>
            <li value="3">Item C</li>
            <li value="4">Item D</li>
            <li value="5">Item E</li>
            <li value="6">Item F</li>
            <li value="7">Item G</li>
        </ul>
    </div>
    
    <div id="boxB">
        <ul id="listB" class="myList">
            <li value="1">Item A</li>
            <li value="2">Item B</li>
            <li value="3">Item C</li>
            <li value="4">Item D</li>
            <li value="5">Item E</li>
            <li value="6">Item F</li>
            <li value="7">Item G</li>
        </ul>
    </div>
    

    为什么?!我快疯了!有什么建议吗?

    7 回复  |  直到 7 年前
        1
  •  38
  •   manji    15 年前

    .sortable('toArray') 序列化项 Ids 在数组中,您的项没有ID,这就是为什么您有空字符串的原因。

        2
  •  60
  •   Niklaus    11 年前

    您可以这样定义要获取的属性:

    var result = $(this).sortable('toArray', {attribute: 'value'});
    
        3
  •  3
  •   Suraj Shrestha user3854793    10 年前

    我也遇到了这个问题,除了我的元素上有ID,jquery的sortable(“toarray”)在返回ID时很容易出错,但是您可以使用以下方法在javascript中获取它们:

    function getSortOrder() {
        var children = document.getElementById('sortedElement').childNodes;
        var sort = "";
        for (x in children) {
            sort = sort + children[x].id + ",";
        }
        return sort;
    }
    

    当然,这会以逗号分隔的字符串返回ID,但您可以返回数组。 我相信有更好的方法来解决这个问题,这就是我找到的解决方法。

        4
  •  2
  •   Keith Aymar    7 年前

    我看到一些纯javascript的答案。它们工作,但要小心,它们可能不会按屏幕上可见的顺序返回项目。使用下面的代码,请参见上面的jtsalva,将按正确的排序顺序返回项目。这让我苦恼了一段时间,因为我想把新订单保存到数据库中,这样我就可以在有人离开的地方重新加载网格。

    var result = $(this).sortable('toArray', {attribute: 'value'});
    
        5
  •  0
  •   Skeletor    8 年前

    如果serialize返回空字符串,请确保ID属性包含下划线。它们的格式必须为:“set_number”,例如,ID属性为“foo_1”、“foo_5”、“foo_2”的3元素列表将序列化为“foo[]=1&foo[]=5&foo[]=2”。可以使用下划线、等号或连字符分隔集合和数字。例如,“foo=1”、“foo-1”和“foo-1”都序列化为“foo[]=1”。

    jq sortable reference

        6
  •  0
  •   trojan Shehary    8 年前

    $('.Sortable').Sortable('ToArray'); 只分析类的第一个元素 可分类的 . 您可以使用 每个 :

    $('.sortable').each(function(){
        result.push($(this).sortable('toArray'));
    })
    
        7
  •  0
  •   jtsalva    7 年前

    要使用其他属性,可以执行以下操作:

    $('#element').sortable('toArray' {attribute: 'value'})
    

    这样它就可以使用代码中的“value”属性了。

    Documentation on Sortable toArray method

    推荐文章