【问题标题】:JQuery UI Sortable: Save keys with sort orderJQuery UI Sortable:按排序顺序保存键
【发布时间】:2015-09-16 19:26:45
【问题描述】:

我正在使用此代码来保存我的 JQuery UI 排序顺序:

$(function() {
    $('#sortable').sortable({
    update: function (event, ui) {
        var data = $(this).sortable('serialize');
        $.ajax({
            data: data,
            type: 'POST',
            url: '/sort.php'
            });
        }
    });
    $( "#sortable" ).disableSelection();
});

这会产生一个数字数组。假设我还想根据列表项中的标签保存带有数字的键。

例如一个排序列表,例如:

<ul id='sortable'>
<li id='item-3' name='special'><image src='special.jpg'></li>
<li id='item-1' name='normal'><image src='normal.jpg'></li>
<li id='item-2' name='extraordinary'><image src='extraordinary.jpg'></li>
</ul>

会在 PHP 中生成这个数组:

$item['special'] = 3;
$item['normal'] = 1;
$item['extraordinary'] = 2;

我知道如何使用 JQuery 访问标签,但不知道如何将这些标签序列化为数组以传递给我的 PHP 脚本以及排序后的数字。救命!

【问题讨论】:

    标签: javascript php jquery jquery-ui sorting


    【解决方案1】:

    谢谢,dfsq!我还发现了 toArray,如果你只需要键,它就可以工作。

    $(function() {
        $('#sortable').sortable({
        update: function (event, ui) {
            var data = $(this).sortable('toArray', {attribute: 'data-name'});
            //alert(data);
            $.ajax({
                data: {data:data},
                type: 'POST',
                url: 'post.php'
                });
            }
        });
        $( "#sortable" ).disableSelection();
    });
    

    【讨论】:

      【解决方案2】:

      您可以使用键作为元素的名称属性和值索引手动构造数据对象(加1,它是从零开始的):

      $('#sortable').sortable({
          update: function (event, ui) {
              var data = {};
              $('#sortable').children().each(function() {
                  data[$(this).attr('name')] = $(this).index() + 1;
              });
              $.ajax({
                  data: data,
                  type: 'POST',
                  url: '/sort.php'
              });
          }
      });
      $("#sortable").disableSelection();
      

      然后在服务器上你将拥有像$_POST['normal'] = 1 这样的 POST 数组。

      或者,您可以将项目作为项目“嵌套”数组的一部分传递:

      data['item[' + $(this).attr('name') + ']'] = $(this).index() + 1;
      

      并且有像$_POST['item']['normal'] = 1这样的POST数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-29
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多