【发布时间】:2018-03-01 08:04:23
【问题描述】:
我使用jQuery UI Sortable 让用户对查询的数据进行排序,并将排序后的数据保存到另一个表中。我将更改后的订单放入隐藏字段并保存数据。
HTML
<?php
// $queried_data is queried in LIFO order from a table, suppose an order like: 1,2,3,4
$saved_data = '2,3,4,1'; //queried as a string from another table
?>
<div class="data-sorter">
<ul id="sortable-data">
<?php foreach($queried_data as $key => $value) : ?>
<li id="<?php echo $value->ID; ?>">
<?php echo $value->title; ?>
</li>
<?php endforeach; ?>
</ul>
<!-- HIDDEN FIELD: putting saved data here, and updating according to the changed data, and finally saving as a comma-separated string -->
<input type="hidden" class="data-sorted" value="<?php echo $saved_data; ?>">
</div>
JAVASCRIPTS
jQuery( document ).ready(function($) {
"use strict";
var sortable_data = $( "#sortable-data" );
sortable_data.sortable({
update: function( event, ui ) {
var list_id = this.id,
item_moved = ui.item.attr('id'),
order = $(this).sortable('toArray'),
positions = order.join(',');
var hidden_field = $('#'+ list_id).parent().find('.data-sorted');
hidden_field.val(positions).trigger('change');
}
});
sortable_data.disableSelection();
});
但正如您所见,$queried_data ≠ $saved_data。因此,在刷新之后,PHP 循环将事情按原样进行。我没关系。我只需要使用可排序的 jQuery UI 操作 DOM,以便它们按照从 $saved_data 获取的顺序显示。
我需要一种方法来触发可排序的 jQuery UI(我在 Javascripts 中的第 6 行中做了)以及根据 $saved_data 设置值(可用作隐藏字段 .data-sorted 的值)。
我知道我需要Sortatble create event,但我不知道该怎么做。
【问题讨论】:
标签: php jquery jquery-ui-sortable