Salut à tous,
J'utilise la librairie AJAX de http://script.aculo.us, pour gérer des listes d'éléments triables.
Exemple ici : http://wiki.script.aculo.us/scriptac...tableListsDemo
J'ai la possibilité de faire passer les éléments d'une liste à l'autre grace à la classe javascript Sortable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <ul id="colstructure" class="struct"> <li id="colstructure_colstructuretxt"><div class="drag_drop"><img src="/pix/ico_txt.png"></div></li> <li id="colstructure_colstructuretab"><div class="drag_drop"><img src="/pix/ico_tab.png"></div></li> <li id="colstructure_colstructureimg"><div class="drag_drop"><img src="/pix/ico_img.png"></div></li> </ul> <ul id="colcentre" class="struct"> <li id="colcentre_colcentretxt"><div class="drag_drop"><img src="/pix/ico_txt.png"></div></li> <li id="colcentre_colcentretab"><div class="drag_drop"><img src="/pix/ico_tab.png"></div></li> <li id="colcentre_colcentreimg"><div class="drag_drop"><img src="/pix/ico_img.png"></div></li> </ul>
Je déclare les listes ainsi :
Je souhaiterai que si l'on déplace un élément d'une liste à l'autre, dans la liste de départ l'élément transféré soit recréé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <script type="text/javascript"> Sortable.create("colcentre", {dropOnEmpty:false,handle:'drag_drop',containment:["colcentre","colstructure"], constraint:false, onChange:function(){updateStructure()}}); Sortable.create("colstructure", {dropOnEmpty:false,handle:'drag_drop', containment:["colcentre","colstructure"], constraint:false, onChange:function(){updateStructure()}}); </script>
Celà ne serait plus un déplacement d'élément d'une liste à l'autre mais une copie d'élément d'une liste à l'autre.
Pour celà, lorsque que déplace un élément d'une liste à l'autre, j'appelle la fonction updateStructure() qui lance une requête XmlHttpRequest qui va recréer le contenu de ma liste de départ de la manière suivante :
(la langage de l'application est JSP)
Mon problème est que l'élément déplacé n'a pas changé d'id, il se nomme toujours (par exemple) <li id="colstructure_colstructuretxt">.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 out.print(" document.getElementById('colstructure').innerHTML='"); out.print("<li id=\"colstructure_colstructuretxt\">"); out.print(" <div class=\"drag_drop\"><img src=\"/pix/ico_txt.png\"></div>"); out.print("</li>"); out.print("<li id=\"colstructure_colstructuretab\">"); out.print(" <div class=\"drag_drop\"><img src=\"/pix/ico_tab.png\"></div>"); out.print("</li>"); out.print("<li id=\"colstructure_colstructureimg\">"); out.print(" <div class=\"drag_drop\"><img src=\"/pix/ico_img.png\"></div>"); out.print("</li>';");
La structure du nom est importante dans mon cas : "Id de la liste auquel il appartient"_"chaine sans importance".
Donc ma méthode qui consiste à récréer la liste de départ, ne me permet plus de déplacer aucun éléments par la suite, car je me retrouve avec deux élément avec le meme ID.
Est-il possible de renommer l'id d'un élément une fois qu'il a été déplacé ?
Avez vous une autre solution ou un autre axe de recherche à mon problème ??
Partager