我正在尝试对数据库条目列表进行排序,然后使用Joomla中的新订单更新数据库。
到目前为止,我已经获得了mootools Sortables
列表,每个<li>
都有两个隐藏<input>
来跟踪条目的ID和顺序。目前,订单变量不会改变,只反映原始订单。
我希望捕获提交事件并将订单变量更改为现在的状态,然后发送请求,但我不知道如何执行此操作...
我有:
<li style="float:left">
<input type="hidden" name="o<?php echo $row->order; ?>" value="<?php echo $i; ?>" />
<input type="hidden" name="i<?php echo $row->order; ?>" value="<?php echo $row->lotid; ?>" />
Lot <?php echo $row->lot_name; ?><br />
<?php echo $row->address; ?>
</li>
和
window.addEvent('domready', function(){
new Sortables('#order-grid', {opacity: 0.7});
form = document.id('adminForm');
list = document.id('order-grid');
form.addEvent('submit', function(e) {
var sortOrder = [];
list.getElements('li').each(function(li) {
sortOrder.push(li.retrieve... //Stuck!
});
});
});
任何帮助表示感谢。
答案 0 :(得分:2)
doc页面是你的朋友。 http://mootools.net/docs/more/Drag/Sortables
首先,我要说保存参考。
var sortables = new Sortables(options)
然后您可以使用sortables.serialize()
方法检索新订单。默认情况下,序列化将返回元素ID - 但它接受一个函数的参数 - 所以你可以返回任何你喜欢的。
例如。要获取新排序顺序的数组,只需执行
var newOrder = sortables.serialize(function(el, index) {
return el.get('data-id'); // or el.retrieve('id'); if you have one.
});
最后,无需在提交事件中执行此操作 - 您可以执行以下操作:
var orderField = document.id("i_something_order");
new Sortables('#order-grid', {
onComplete: function() {
orderField.set('value', this.serialize(function(el) {
el.retrieve('id');
}).join(','));
}
});
请注意,retrieve
表示您事先已使用store
。如果它是你所追求的DOM属性,只需执行el.get('data-id')
或其他任何建议