jQuery插件asmSelect不保留排序顺序

时间:2010-08-04 18:33:35

标签: jquery sorting asmselect

所以,我正在使用asmSelect插件创建列表,但也尝试使用它来编辑现有列表。 asmSelect允许您在提交之前手动排序/排列所选选项。

我的问题是每当我从数据库中获取用户排序列表并让asmSelect在我的页面上执行它的操作时,默认情况下(因为它是多选)它只是以原始选项的顺序排列所选选项选择出现。因此,根本不保留我的排序顺序......

还有其他人看过这个问题并有解决方案吗?

3 个答案:

答案 0 :(得分:1)

我还尝试按照数据库的顺序构建最初选择的列表。我最终更新了asmselect。 See updated asmselect code and example here.

在我的jsp中:

<select id="availableItems" class="multiselect" name="menuDishes" multiple="multiple" title="Select items">
    <c:forEach var="item" items="${myAvailableItems}">
        <option value="${item.id}" data-sortby="${fn:indexOf(mySelectedItems, item.name)}" ${fn:contains(mySelectedItems, item.name) ? 'selected="selected"' : ''}>${item.name}</option>
    </c:forEach>
</select>

答案 1 :(得分:0)

这里的问题相同。

在我的情况下,我注意到12个项目列表的值为0到11被排序为0,1,10,11,2,3 ......作为字符串排序而不是数字顺序,我的意思是。也许有一些方法可以强制asm-select转换为数字或按数字顺序排序?

编辑:没关系,我试图使用“option_1”,“option_2”等字符串来订购它。如果它用于排序的值不是有效的数字字符串,则它将作为字符串返回到订单。

Kchau,难道你不是在一个额外的字段中存储订单,或者使用数据库id字段来检测quitch存储的选项中的顺序?一旦您将订单存储(或检测到,您更喜欢),就需要为要订购的代码生成rel值。我正在生成这样的东西:

<option value="202">A news item</option>
<option value="164">Another news item</option>
<option value="162">More boring news</option>
<option value="175" rel="option_00000" selected="selected">One of the selected news</option>
<option value="15" rel="option_00001" selected="selected">Another interesting selected news</option>
<option value="204" rel="option_00002" selected="selected">This interesting news was selected too</option>

这是命令列表

的rel值

答案 2 :(得分:0)

在启动asm select之前放置以下内容:

$('#id_of_your_select').html($("option", $('#id_of_your_select')).sort(function(a, b) { 
    var arel = $(a).attr('rel');
    var brel = $(b).attr('rel');
    return arel == brel ? 0 : arel < brel ? -1 : 1 
}));

确保所选项目的顺序与您告诉他们的顺序相同。

$("select[multiple]").asmSelect({
    addItemTarget: 'bottom',
    animate: false,
    sortable: true,
    highlight: false
});

并确保在数据库中保存行时保持该顺序,当您在页面加载时收集它们时,它们的顺序仍然相同。