2010-08-04 8 views
2

Donc, j'utilise le plugin asmSelect pour créer des listes, mais j'essaie aussi de l'utiliser pour éditer des listes existantes. asmSelect vous permet de trier/organiser manuellement les options sélectionnées avant de les soumettre. Mon problème est que chaque fois que je vais récupérer la liste triée par l'utilisateur de la base de données et laisser asmSelect faire sa chose sur ma page, par défaut (parce que c'est une sélection multiple) il commande les options sélectionnées dans n'importe quel ordre dans la sélection apparaît. Par conséquent, ne pas conserver mon ordre trié du tout ...Le plugin jQuery, asmSelect, ne conserve pas l'ordre de tri

Quelqu'un d'autre a-t-il déjà vu ce problème et a-t-il une solution?

+0

J'ai aussi besoin d'une solution. – David

Répondre

0

Même problème ici. Dans mon cas, j'ai remarqué qu'une liste de 12 items avec des valeurs de 0 à 11 a été triée comme 0, 1, 10, 11, 2, 3 ... Comme ordre de chaînes au lieu de l'ordre numérique, je veux dire. Peut-être y at-il un moyen de forcer asm-select à faire la conversion en nombres ou à trier par ordre numérique?

EDIT: nevermind, j'essayais d'utiliser une chaîne "option_1", "option_2", etc, pour la commander. Si les valeurs qu'il utilise pour commander ne sont pas une chaîne numérique valide, il revient à l'ordre sous forme de chaîne.

Kchau, est-ce que vous ne stockez pas la commande dans un champ supplémentaire, ou en utilisant le champ id de la base de données pour détecter l'ordre dans quitch les options où stockées? Une fois la commande enregistrée (ou détectée, ce que vous préférez), il s'agit de générer la valeur rel du code à commander. Je générer quelque chose comme ceci:

<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> 

c'est la valeur rel ce qui commande la liste

1

J'ai aussi essayé de construire la liste initialement sélectionnée dans l'ordre à partir de la base de données. J'ai fini par mettre à jour asmselect. See updated asmselect code and example here.

Dans mon 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

Placez le suivant avant de lancer l'asm sélectionner:

$('#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 
})); 

Il veille à ce que les éléments sélectionnés sont placés dans le même ordre que vous leur avez dit être dans.

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

Et assurez-vous que lorsque vous enregistrez les lignes dans la base de données Ils maintiennent cet ordre et lorsque vous les collectez sur le chargement de la page, ils sont toujours dans le même ordre.