如何获取jQuery可排序列表顺序?

时间:2016-08-27 15:52:20

标签: javascript jquery jquery-ui jquery-ui-sortable

我正在使用jQuery Sortable来允许用户在页面上拖放元素。当用户拖动div时,我需要获取列表的更新顺序并将其传递给后端。到目前为止,我已经尝试过:

  $( function() {
    $( "#sortable" ).sortable({
        axis: 'y',
        stop: function (event, ui) {
            var data = $(this).sortable('serialize');
            alert(data);
            $.ajax({
                    data: oData,
                type: 'POST',
                url: '/url/here'
            });
    }
    });
    $( "#sortable" ).disableSelection();
  } );

但是这会使动画真的不顺畅并且不会提醒任何数据。每次用户拖放div时如何获得位置列表?

JSFIDDLE

2 个答案:

答案 0 :(得分:2)

您可以使用refreshPositions()函数返回表示可排序项目的对象。然后,您可以通过调用该对象上的.children()来获取更新的子项列表。

将位置保存到stop事件中的变量,该事件在完成排序后触发。

我已更新您的功能以包含stop事件:

$("#sortable").sortable({
  stop: function(ev, ui) {
    //Get the updated positions by calling refreshPositions and then .children on the resulting object.
    var children = $('#sortable').sortable('refreshPositions').children();
    console.log('Positions: ');
    //Loopp through each item in the children array and print out the text.
    $.each(children, function() {
        console.log($(this).text().trim());
    });
  }
});

<强> Updated Fiddle

答案 1 :(得分:0)

相反,请使用toArray()方法,详见此处:http://api.jqueryui.com/sortable/#method-toArray

相关问题