login  Naam:   Wachtwoord: 
Registreer je!
Scripts > JavaScript > Formulieren > [JS] Switch items


Reacties op het script [JS] Switch items

Offline  Thomas
Gepost op: 03 februari 2006 - 23:28
Moderator



Als je meerdere items tegelijkertijd wilt verslepen gaat het mis - items worden gedupliceerd.

Offline  Stijn
Gepost op: 04 februari 2006 - 01:45
PHP expert



edit: aangepast!!!

Offline  Thomas
Gepost op: 14 augustus 2006 - 09:25
Moderator



Omdat ik soortgelijke functionaliteit nodig had, maar toch enkele zaken miste heb ik op dit script mijn eigen variant geschreven.

Ik zag dat een aantal zaken niet echt nodig waren (zoals het controleren of een waarde al in een lijst voorkwam - ik neem aan dat je lijsten zo in elkaar zitten dat er initieel geen dubbele waarden in zitten, de rest van je code zou er dan voor moeten zorgen dat dit ook zo blijft ), en er een aantal zaken ontbraken (zoals verschillende keys en values in je options - als je script er rekening mee houdt dat deze kunnen verschillen, kun je zelf later nog altijd besluiten om voor de keys en values van je dropdown dezelfde waarden te gebruiken - je bent dan i.i.g. niet beperkt door de functie waarmee je je opties kunt verslepen).

Hieronder code+voorbeeld in één (pingpong.html):
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <title></title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  6. <script type="text/javascript">
  7. function transport(form, from, to)
  8. {
  9. // shorthand
  10. var frm = document.getElementById(form);
  11.  
  12. var add = new Array(); // array with text and values of selected items
  13. var rem = new Array(); // list of indexes to remove
  14.  
  15. // determine items to copy and remove
  16. for(var i=0; i < frm.elements[from].length; i++)
  17. {
  18. if(frm.elements[from].options[i].selected)
  19. {
  20. add[add.length] = new Array(frm.elements[from].options[i].text, frm.elements[from].options[i].value); // to be copied
  21. rem[rem.length] = i; // to be removed
  22. }
  23. }
  24.  
  25. // append selected source to target
  26. for(var i=0; i < add.length; i++)
  27. {
  28. var len = frm.elements[to].length; // current length of target
  29. frm.elements[to].options[len] = new Option(add[i][0], add[i][1]);
  30. }
  31.  
  32. // remove selected items from source - move back from end to maintain order of indexes
  33. for(var i=(rem.length-1); i > -1; i--)
  34. {
  35. frm.elements[from].remove(rem[i]);
  36. }
  37. }
  38.  
  39. function spam(form, field)
  40. {
  41. var frm = document.getElementById(form);
  42.  
  43. for(var i=0; i < frm.elements[field].length; i++)
  44. {
  45. window.alert(frm.elements[field].options[i].text+", "+frm.elements[field].options[i].value);
  46. }
  47. }
  48. </script>
  49. </head>
  50.  
  51. <body>
  52. <form id="whatever" action="pingpong.html" method="post">
  53. <select name="source" multiple="multiple" size="10" style="width:125px">
  54. <option value="10">Amsterdam</option>
  55. <option value="11">Diemen e.o.</option>
  56. <option value="12">Hilversum</option>
  57. <option value="13">Almere</option>
  58. <option value="14">Bussum</option>
  59. <option value="15">Zaandam</option>
  60. </select>
  61.  
  62. <button type="button" onclick="transport('whatever', 'destination', 'source')">&lt;</button>
  63. <button type="button" onclick="transport('whatever', 'source', 'destination')">&gt;</button>
  64.  
  65. <select name="destination" multiple="multiple" size="10" style="width:125px">
  66. </select>
  67.  
  68. <button type="button" onclick="spam('whatever', 'source')">waarden links</button>
  69. <button type="button" onclick="spam('whatever', 'destination')">waarden rechts</button>
  70. </form>
  71. </body>
  72. </html>


Misschien het huidige script updaten? Credits zijn nog steeds voor stijn1989 .

Offline  Stijn
Gepost op: 14 augustus 2006 - 15:19
PHP expert



je hebt gelijk Ik heb het aangepast (goed opgemerkt , zag dat niet eens) maar die controle niet omdat ik daar geloof ik problemen mee kreeg toen ik het script aan het testen was.

mvg stijn

Citaat:
Credits zijn nog steeds voor stijn1989

Thanks 


Enkel aanvullende informatie, vragen en antwoorden op vragen zijn welkom.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.047s