因此,我使用asmSelect插件来创建列表,但也尝试使用它来编辑现有列表。asmSelect 允许您在提交之前手动排序/排列选定的选项。
我的问题是每当我去从数据库中获取用户排序列表并让 asmSelect 在我的页面上执行它的操作时,默认情况下(因为它是一个多选)它只是按照选择中原始选项出现的任何顺序对所选选项进行排序. 因此,根本不保留我的排序顺序......
还有其他人看到这个问题并有解决方案吗?
我还尝试按照数据库中的顺序构建最初选择的列表。我最终更新了 asmselect。在此处查看更新的 asmselect 代码和示例。
在我的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>
这里同样的问题。
在我的例子中,我注意到一个包含 0 到 11 的 12 项列表被排序为 0、1、10、11、2、3 ......我的意思是字符串排序而不是数字顺序。也许有一些方法可以强制 asm-select 转换为数字或按数字顺序排序?
编辑:没关系,我试图使用“option_1”、“option_2”等字符串来订购它。如果它用于排序的值不是有效的数字字符串,它会回退到作为字符串排序。
Kchau,可能是您没有将订单存储在额外的字段中,还是使用数据库 id 字段来检测订单以退出存储的选项?一旦您存储了订单(或检测到您喜欢的订单),就需要为要订购的代码生成 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 值对列表进行排序
在启动 asm 选择之前放置以下内容:
$('#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
});
并确保当您将行保存在数据库中时,它们保持该顺序,并且当您在页面加载时收集它们时,它们也仍然处于相同的顺序。