繁体   English   中英

JQuery UI Sortable:按排序顺序保存键

[英]JQuery UI Sortable: Save keys with sort order

我正在使用以下代码保存我的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脚本。 救命!

谢谢,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();
});

您可以使用键作为元素的名称属性和值索引(加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数组,例如$_POST['normal'] = 1 ,等等。

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

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

并具有POST数组,如$_POST['item']['normal'] = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM