1

我正在尝试对数据库条目列表进行排序,然后使用 Joomla 中的新顺序更新数据库。

到目前为止,我有一个 mootoolsSortables列表,每个列表都有<li>两个隐藏<input>来跟踪条目的 id 和 order。目前 order 变量没有改变,只是反映了原来的 order。

我希望捕获提交事件并将订单变量更改为现在应该是的,然后发送请求,但是我不知道该怎么做......

我有:

<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!
        });
    });
});

任何帮助表示赞赏。

4

1 回答 1

2

文档页面是您的朋友。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')按照建议执行或执行任何操作

于 2012-04-24T11:42:58.247 回答