jQuery UI Sortable - 如何根据得到的数据设置数据
jQuery UI Sortable - how to set data, based on the got data
我正在使用 jQuery UI Sortable 让用户对查询的数据进行排序,并将排序后的数据保存到另一个 table。我将更改后的订单放入隐藏字段并保存数据。
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 sortable 来操纵 DOM 以便它们按照从 $saved_data
.[=22 获得的顺序出现=]
我需要一种方法来触发 jQuery UI sortable(我在 Javascripts 的第 6 行中做了)并根据 $saved_data
(可用作隐藏字段的值 .data-sorted
)。
我知道我需要 Sortatble create
event,但我不知道怎么做。
检查这个逻辑,应该可以。考虑到 li id
与逗号分隔值相同。
在 sortable
调用后页面加载调用函数 reorder()
。
$("#sortable-data").sortable({update: reorder});
function reorder()
{
orderArray = $('.data-sorted').val();
elementContainer = $("#sortable-data")
$.each(orderArray, function(key, val){
elementContainer.append($("li#"+val));
});
}
我正在使用 jQuery UI Sortable 让用户对查询的数据进行排序,并将排序后的数据保存到另一个 table。我将更改后的订单放入隐藏字段并保存数据。
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 sortable 来操纵 DOM 以便它们按照从 $saved_data
.[=22 获得的顺序出现=]
我需要一种方法来触发 jQuery UI sortable(我在 Javascripts 的第 6 行中做了)并根据 $saved_data
(可用作隐藏字段的值 .data-sorted
)。
我知道我需要 Sortatble create
event,但我不知道怎么做。
检查这个逻辑,应该可以。考虑到 li id
与逗号分隔值相同。
在 sortable
调用后页面加载调用函数 reorder()
。
$("#sortable-data").sortable({update: reorder});
function reorder()
{
orderArray = $('.data-sorted').val();
elementContainer = $("#sortable-data")
$.each(orderArray, function(key, val){
elementContainer.append($("li#"+val));
});
}