Avatar billede verakso Nybegynder
15. januar 2001 - 09:57 Der er 16 kommentarer og
2 løsninger

Dynamisk Basket funktionalitet

Hejsa,

Jeg sidder og bakser lidt med en udfordring, jeg ikke helt kan få hul på.
Det jeg vil lave er en slags dynamisk udvælgelses funktion, så det bliver nemmere for brugeren at vælge forskellige elementer.

Det der var meningen, var at jeg dynamisk genererer de to select bokse(Hvordan har jeg heller ikke helt grejet endnu..), men mit store problem er, at få fikset den dynamik der skal til, for at kunne flytte indhold fra en selection boks til en anden.

Velagt er lidt sovs, for bedre at kunne vise hvor jeg vil hen, så hvis der er nogle der har nogle hints eller referencer til en løsning er det i orden. Findes der derimod en konkret løsning (Nogen må jo have lavet det her før!), er det bare fedt.

/Verakso

[KODE]
<form>
<table>
<tr>
    <td colspan=\"3\" align=\"center\">Dynamsisk Basket</td>
</tr>
<tr>
    <td><select name=\"notselected\" size=\"5\" multiple>
    <option value=\"Item0\">Item0</option>
    <option value=\"Item2\">Item2</option>
    <option value=\"Item4\">Item4</option>
    <option value=\"Item5\">Item5</option>
    <option value=\"Item6\">Item6</option>
    <option value=\"Item9\">Item9</option>
    </select></td>
    <td align=\"center\"><input type=\"submit\" value=\" > \"><BR>
    <input type=\"submit\" value=\">>\"><BR>
    <input type=\"submit\" value=\" < \"><BR>
    <input type=\"submit\" value=\"<<\"><BR></td>
    <td><select name=\"selected\" size=\"5\" multiple>
    <option value=\"Item1\">Item1</option>
    <option value=\"Item3\">Item3</option>
    <option value=\"Item7\">Item7</option>
    <option value=\"Item8\">Item8</option>
    <option value=\"Item10\">Item10</option>
</select></td>
</tr>
<tr>
    <td colspan=\"3\" align=\"center\"><input type=\"submit\" value=\"Opdater\"></td>
</tr>
</table>
</form>
[/KODE]
Avatar billede kasseper Nybegynder
15. januar 2001 - 10:09 #1
Jeg vik hjælp af the master him self til at lave noget ligende se her :

http://www.eksperten.dk/spm/28243
Den virker perfekt.....
Avatar billede verakso Nybegynder
15. januar 2001 - 10:14 #2
Jeg kigger lige, imellemtiden kan det være at mesteren ikke kan dy sig, og kommer med den komplette løsning.. :)
Avatar billede verakso Nybegynder
15. januar 2001 - 10:15 #3
.. og så glemte jeg jo lige, at forskellen her, næsten er den samme - bortset fra at begge bokse i mit tilfælde er dynamisk genererede. Det kan være at man tidligere havde valgt noget..
Avatar billede kasseper Nybegynder
15. januar 2001 - 10:19 #4
Det er ikke noget problem med dynamisk genererede bokse....
Avatar billede kasseper Nybegynder
15. januar 2001 - 10:40 #5
Her :
Den er måske ikke så genialt lavet, men den virker da :

Lig på nær at jeg ikke havde din opdater kanp med, da jeg ikke kunne lurer hvad den skulle gører....

**************************************************
<html>
<head>
<title>28243</title>
<script language=\"JavaScript\">

<!--
  function copy(f) {
    var i=f.s1.selectedIndex;
    if (i>=0) {
      f.s2.options[f.s2.options.length]=new Option(f.s1[i].text,f.s1[i].value);
    }
    }
    function copy2(f) {
    var i=f.s2.selectedIndex;
    if (i>=0) {
      f.s1.options[f.s1.options.length]=new Option(f.s2[i].text,f.s2[i].value);
    }
    } 
  function del1(f) {
    var i=f.s2.selectedIndex;
        if (i>=0) {
          var len=f.s2.options.length;
          for (j=i;j<len-1;j++) {
            f.s2.options[j].value=f.s2.options[j+1].value;
            f.s2.options[j].text=f.s2.options[j+1].text;
          }
          f.s2.options.length--;
        }
        f.s1.selectedIndex=-1;
        f.s2.selectedIndex=-1;
  }
  function del2(f) {
    var i=f.s1.selectedIndex;
        if (i>=0) {
          var len=f.s1.options.length;
          for (j=i;j<len-1;j++) {
            f.s1.options[j].value=f.s1.options[j+1].value;
            f.s1.options[j].text=f.s1.options[j+1].text;
          }
          f.s1.options.length--;
        }
        f.s1.selectedIndex=-1;
        f.s2.selectedIndex=-1;
  }
  function moveall(f){
  var len = f.s1.options.length;
  for (j = 0;j<len;j++) {
      f.s2.options[f.s2.options.length]=new Option(f.s1[j].text,f.s1[j].value);
  }
  for (j=0;j<len;j++) {
            f.s1.options.length--;
          }
         
  }
  function moveall2(f){
  var len = f.s2.options.length;
  for (j = 0;j<len;j++) {
      f.s1.options[f.s1.options.length]=new Option(f.s2[j].text,f.s2[j].value);
  }
  for (j=0;j<len;j++) {
            f.s2.options.length--;
          }
         
  }
//-->

</script>
</head>

<body bgcolor=\"#FFFFFF\">

<form method=post action=\"\">
<select name=\"s1\" size=\"3\" style=\"width: 100px\">
<option value=\"1\">Æbler</option>
<option value=\"2\">Bananer</option>
<option value=\"3\">Pærer</option>
<option value=\"4\">Appelsiner</option>
</select>
<input type=\"button\" name=\"1t2\" value=\">\" onClick=\"copy(this.form);del2(this.form);\">
<input type=\"button\" name=\"2t1\" value=\"<\" onClick=\"copy2(this.form);del1(this.form);\">
<input type=\"button\" name=\"at2\" value=\">>\" onClick=\"moveall(this.form);\">
<input type=\"button\" name=\"bt1\" value=\"<<\" onClick=\"moveall2(this.form);\">

<br>
<select name=\"s2\" size=\"3\" style=\"width: 100px\">
</select>


</form>
</body>
</html>
**************************************************
Avatar billede verakso Nybegynder
15. januar 2001 - 10:43 #6
Okay, jeg kigger lige på denne også...

Opdater knappen, skulle såmænd blot submitte hele skidtet tilbage til DB\'en. Der er jo ikke megen fidus i at designe et system til opdatering, hvis man ikke kan gemme ændringerne.
(Og ligefrem gemme ændringnerne hver gang man flytter et item, er nok lige lidt overkill..)

/Verakso
Avatar billede kasseper Nybegynder
15. januar 2001 - 10:46 #7
Så den må du selv kunne lave, altså opdater funktionen......
Eller skal du også have hjælp til den ???
i så fald skal du nok lige give os lidt tabelnavne og db design forklaring...Er de ASP ?
Avatar billede kasseper Nybegynder
15. januar 2001 - 12:01 #8
Virker det ????
Avatar billede verakso Nybegynder
15. januar 2001 - 12:07 #9
Well, jeg har prøvet at submitte en kommentar snart tre gange, så nu prøver jeg en sidste gang.

Det virker, borset fra at man kun kan vælge een eller alle, men ikke vælge individuelt...

..Og jeg skal nok selv hitte ud af ASP delen, det er sjældent at der er den del der driller...

/Verakso
Avatar billede kasseper Nybegynder
15. januar 2001 - 12:12 #10
Hvordan vil du gerne have man vælger flere...?
Med shift/ctrl knappen som normalt, eller havde du en anden snedig metode...?

Kasseper
Avatar billede verakso Nybegynder
15. januar 2001 - 12:23 #11
Okay, glemte jeg at sige at jeg bruger det her i MS miljø :)???

Det er lige præcis den funktionalitet du beskriver som ikke virker i det eksempel du gav. Det er ikke fordi der mangler at sættes multiple på selctionen, men nok snarre fordi at copy funktionerne ikke kan håndtere flere selections...

Jeg ved det ikke nærmere, men kigger videre når jeg er kommet fra frokost..

ICQ: 38534368
Avatar billede kasseper Nybegynder
15. januar 2001 - 13:39 #12
Hmmmm. det bliver en grov en....
taget fra MS\' hjemmeside :
*****************
The selectedIndex property is most useful when used with SELECT objects that support selecting only one item at a time—that is, those in which the MULTIPLE attribute is not specified. If the MULTIPLE attribute is specified for a SELECT object, the selectedIndex property returns only the index of the first selected item, if any.
*****************

går lige et smut ind i min tænkebox...;)
Avatar billede kasseper Nybegynder
15. januar 2001 - 15:34 #13
Den kan jeg ikke klare......
Jeg må overlade resten af din basket til nogen der har tjeck på DOM, eller måske noget OLE object tingest............JUUUUUMPER > hvor er du !????
Avatar billede olebole Juniormester
15. januar 2001 - 15:36 #14
<ole>
Du vil altid kunne bladre dig gennem en multi-select efter denne recept (omend den skal skræddersyes lidt):

<html>
<head>
<script langauge=\"javascript\">

var sel = new Array();
function findSelected(which) {
    for (i=0; i<which.length; i++) {
        if (which.options[i].selected == true) {
            sel[i] = true;
        }else{
            sel[i] = false;
        }
    }
    document.f.t.value = sel;
}

</script>
</head>
<body>

<form name=\"f\">
    <select name=\"s\" multiple size=\"3\" onchange=\"findSelected(this);\">
        <option value=\"1\">et</option>
        <option value=\"2\">to</option>
        <option value=\"3\">tre</option>
        <option value=\"4\">fire</option>
        <option value=\"5\">fem</option>
    </select>
    <input type=\"text\" size=\"30\" name=\"t\">
</form>

</body>
</html>

/mvh
</bole>
Avatar billede kasseper Nybegynder
16. januar 2001 - 12:06 #15
SÅ ER DEN DER......
***********************************
<html>
<head>
<title>28243</title>
<script language=\"JavaScript\">

<!--
    function copy3(f)
    {
       
        i = f.s1.options.length;
        j = 0;
        while (j < i)
        {   
           
            if (f.s1.options[j].selected == true)
            {
                f.s2.options[f.s2.options.length]=new Option(f.s1[j].text,f.s1[j].value);
            }
            j++; 
        }
        j = 0;
        var len=f.s1.options.length;
        while (j < i)
        {
            if (f.s1.options[j].selected == true)
            {   
                f.s1.options[j].value = \"THISONEISEMPTY\";
                f.s1.options[j].text = \"\";
              }
            j++;
        }
        j=0;
        while (j < len)
        {
            if (f.s1.options[j].value == \"THISONEISEMPTY\" & f.s1.options[j].text == \"\")
            {   
                //alert(\"this one is empty : \" + j);
                for (g=j;g<len-1;g++)
                {
                //alert(g);
                f.s1.options[g].value=f.s1.options[g+1].value;
                f.s1.options[g].text=f.s1.options[g+1].text;
                  }
                  f.s1.options.length--;
                len=f.s1.options.length;
                j = 0; 
              }
            else
            {
            j++;
            }
           
        }
        f.s1.selectedIndex=-1;
        f.s2.selectedIndex=-1;
    }
   
function copy4(f)
    {
       
        i = f.s2.options.length;
        j = 0;
        while (j < i)
        {   
           
            if (f.s2.options[j].selected == true)
            {
                f.s1.options[f.s1.options.length]=new Option(f.s2[j].text,f.s2[j].value);
            }
            j++; 
        }
        j = 0;
        var len=f.s2.options.length;
        while (j < i)
        {
            if (f.s2.options[j].selected == true)
            {   
                f.s2.options[j].value = \"THISONEISEMPTY\";
                f.s2.options[j].text = \"\";
              }
            j++;
        }
        j=0;
        while (j < len)
        {
            if (f.s2.options[j].value == \"THISONEISEMPTY\" & f.s2.options[j].text == \"\")
            {   
                //alert(\"this one is empty : \" + j);
                for (g=j;g<len-1;g++)
                {
                //alert(g);
                f.s2.options[g].value=f.s2.options[g+1].value;
                f.s2.options[g].text=f.s2.options[g+1].text;
                  }
                  f.s2.options.length--;
                len=f.s2.options.length;
                j = 0; 
              }
            else
            {
            j++;
            }
           
        }
        f.s1.selectedIndex=-1;
        f.s2.selectedIndex=-1;
    }
 

 
  function moveall(f){
  var len = f.s1.options.length;
  for (j = 0;j<len;j++) {
      f.s2.options[f.s2.options.length]=new Option(f.s1[j].text,f.s1[j].value);
  }
  for (j=0;j<len;j++) {
            f.s1.options.length--;
          }
         
  }
  function moveall2(f){
  var len = f.s2.options.length;
  for (j = 0;j<len;j++) {
      f.s1.options[f.s1.options.length]=new Option(f.s2[j].text,f.s2[j].value);
  }
  for (j=0;j<len;j++) {
            f.s2.options.length--;
          }
         
  }
//-->

</script>
</head>

<body bgcolor=\"#FFFFFF\">

<form method=post action=\"\">
<select name=\"s1\" size=\"3\" style=\"width: 100px\" multiple>
<option value=\"1\">Æbler</option>
<option value=\"2\">Bananer</option>
<option value=\"3\">Pærer</option>
<option value=\"4\">Appelsiner</option>
</select>
<input type=\"button\" name=\"1t2\" value=\">\" onClick=\"copy3(this.form);\">
<input type=\"button\" name=\"2t1\" value=\"<\" onClick=\"copy4(this.form);\">
<input type=\"button\" name=\"at2\" value=\">>\" onClick=\"moveall(this.form);\">
<input type=\"button\" name=\"bt1\" value=\"<<\" onClick=\"moveall2(this.form);\">

<br>
<select name=\"s2\" size=\"3\" style=\"width: 100px\" multiple>
</select>


</form>
</body>
</html>
*********************************

Det kan godt være at det ikke er verdens smukkeste kode, men den kan da bruges...
Avatar billede kasseper Nybegynder
16. januar 2001 - 13:28 #16
Det er sq en lang frokostpause du har ;)
Avatar billede kasseper Nybegynder
17. januar 2001 - 09:46 #17
HALLLLOOOOOOOOOO;(
Avatar billede verakso Nybegynder
17. januar 2001 - 11:12 #18
Eller også tester jeg meget grundigt ;)

Det er jo så smukt så jeg er helt rørt, men jeg er lidt overbevist om at olobole\'s svar hjalp lidt med på vej, så jeg har fordelt points\'ne på min egen retfærdige måde.

Anyway, tak for hjælpen i denne omgang.

Eftermægle.... Hvor fedt er det så, at vise noget smukt kode frem, og sige se hvor smart, når den løsning der så blev valgt var een select multiple med flere values selected... ak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester