Avatar billede smilus Nybegynder
11. juni 2003 - 15:24 Der er 14 kommentarer og
1 løsning

Select bokse med relation

Ofte har jeg set java scripts til, hvordan valget i 1. select boks kan påvirke valgmulighederne i 2. select boks. Men hvordan ser scriptet ud når der skal flere bokse efter hinanden, f.eks. 5 stk, hvor hver efterfølgende boks skal relatere til valget i den foregående (i samme form)?
Avatar billede roenving Novice
11. juni 2003 - 15:33 #1
Det bliver et omfattende data-array ...

noget i denne stil

var valg =new Array();
valg[0] = new Array();
valg[0][0] = new Array();
valg[0][0][0] = new Array();
valg[0][0][0][0] = new Array();
valg[0][0][0][0][0] = 'Første valg i den 5. boks, når første valg er i alle de andre bokse';

-- og MEGET mere ,-)

-- select-boxene er i princippet fuldstændig de samme, som hvis du kun havde to !-)
Avatar billede smilus Nybegynder
11. juni 2003 - 15:42 #2
Hvis du vil lave et komplet eksempel, får du glædeligt 100 p...........:)
(jeg ER new-be)
Avatar billede Slettet bruger
11. juni 2003 - 17:05 #3
Det tror jeg næppe, du kan overtale en til at lave. Som roenving siger, skaber det jo et utal af options. Hvis der bare er 5 muligheder i den første selectboks og 5 muligheder for hver af de følgende selectbokse pr. mulighed i den foregående boks, bliver det jo til 5^5 = 3120 muligheder.
Avatar billede roenving Novice
11. juni 2003 - 18:16 #4
>>phoenixv

forkert, der skal jo også være tekst i de andre, så det er:
5^5+5^4+5^3+5^2+5 = 3905 muligheder ;O)
Avatar billede smilus Nybegynder
11. juni 2003 - 18:59 #5
Ups, jeg tror I misforstår mig, det jeg søger er ikke helt så vildt endda,
mere a´la´:

Box 1        Box 2        Box 3   
1. Årstid    2.1 efterår    3.1.1 oktober   
        2.2 forår    3.2.1 april
                3.2.2 maj
2. Noget andet

I eksemplet vil et valg på årstid i boks 1 give valget mellem forår og efterår i boks 2, valget på forår vil dernæst give mulighed for april og maj i boks 3. Blot for 5 bokse der´uda´.
Avatar billede roenving Novice
11. juni 2003 - 19:41 #6
Prøv det:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<HTML>

<HEAD>
<TITLE>Fem afhængige select-boxe</TITLE>
<META NAME="keywords" CONTENT="roenving;http://www.eksperten.dk/spm/363512">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<SCRIPT LANGUAGE="javascript" TYPE="text/javascript">
var valg =new Array();
/* Normalt ville alt være indtastet på en eller anden måde, som f.eks.:
valg5[0] = new Array();
valg5[0][0] = new Array();
valg5[0][0][0] = new Array();
valg5[0][0][0][0] = new Array();
valg5[0][0][0][0][0] = '5. boks, nr 1: 1 1 1 1 i de andre';
valg5[0][0][0][0][1] = '5. boks, nr 2: 1 1 1 1 i de andre';
valg5[0][0][0][1] = new Array();
valg5[0][0][0][1][0] = '5. boks, nr 1: 1 1 1 2 i de andre';
valg5[0][0][0][1][1] = '5. boks, nr 2: 1 1 1 2 i de andre';

...

valg5[0][0][1] = new Array();
valg5[0][0][1][0] = new Array();
valg5[0][0][1][0][0] = '5. boks, nr 1: 1 1 2 1 i de andre';
valg5[0][0][1][0][1] = '5. boks, nr 2: 1 1 2 1 i de andre';
valg5[0][0][1][1] = new Array();
valg5[0][0][1][1][0] = '5. boks, nr 1: 1 1 2 2 i de andre';
valg5[0][0][1][1][1] = '5. boks, nr 2: 1 1 2 2 i de andre';

osv...

-- her er jeg lidt doven og generer det dynamisk ...
Ialt skal der her være næsten 4000 tekster -- bare det er for meget, hvis man ikke skal bruge det
*/
var valg1 = ['Første Valgt','Anden Valgt','Tredje Valgt','Fjerde Valgt','Femte Valgt'];
var valg2 = new Array;
var valg3 = new Array;
var valg4 = new Array;
var valg5 = new Array;

function init(){
var akt = document.minForm.minSelect0;
for (i=0;5>i;i++){
    valg2[i] = new Array();
    akt.options[i+1].value = ""+(i+1);
    akt.options[i+1].text = valg1[i];
    for (j=0;5>j;j++){
        valg2[i][j] = '2. boks, nr. '+(j+1)+': '+(i+1)+' i den første';
    }
}
alert
for (i=0;5>i;i++){
    valg3[i] = new Array();
    for (j=0;5>j;j++){
        valg3[i][j] = new Array();
        for (k=0;5>k;k++){
            valg3[i][j][k] = '3. boks, nr. '+(k+1)+': '+(i+1)+' '+(j+1)+' i de første';
        }
    }
}
for (i=0;5>i;i++){
    valg4[i] = new Array();
    for (j=0;5>j;j++){
        valg4[i][j] = new Array();
        for (k=0;5>k;k++){
            valg4[i][j][k] = new Array();
            for(l=0;5>l;l++){
                valg4[i][j][k][l] = '4. boks, nr. '+(l+1)+': '+(i+1)+' '+(j+1)+' '+(k+1)+' i de første';
            }
        }
    }
}
for (i=0;5>i;i++){
    valg5[i] = new Array();
    for (j=0;5>j;j++){
        valg5[i][j] = new Array();
        for (k=0;5>k;k++){
            valg5[i][j][k] = new Array();
            for(l=0;5>l;l++){
                valg5[i][j][k][l] = new Array();
                for(m=0;5>m;m++){
                    valg5[i][j][k][l][m] = '5. boks, nr. '+(m+1)+': '+(i+1)+' '+(j+1)+' '+(k+1)+' '+(l+1)+' i de første';
                }
            }
        }
    }
}

}
var akt = "";
function change(nr){
    var valgt = new Array();
    for (i=0;4>i;i++){
        valgt[i] = eval('document.minForm.minSelect'+i+'.selectedIndex');
    }
    akt = eval('document.minForm.minSelect'+nr);
    switch (nr){
        case 1:
            if (valgt[0]>0){
                for (i=1;6>i;i++){
                    akt.options[i].value = ""+i;
                    akt.options[i].text = valg2[valgt[0]-1][i-1];
                }
                change(2);
            }
        case 2:
            if (valgt[0]*valgt[1]>0){
                for (i=1;6>i;i++){
                    akt.options[i].value = ""+i;
                    akt.options[i].text = valg3[valgt[0]-1][valgt[1]-1][i-1];
                }
                change(3);
            }
        case 3:
            if (valgt[0]*valgt[1]*valgt[2]>0){
                for (i=1;6>i;i++){
                    akt.options[i].value = ""+i;
                    akt.options[i].text = valg4[valgt[0]-1][valgt[1]-1][valgt[2]-1][i-1];
                }
                change(4);
            }
        case 4:
            if (valgt[0]*valgt[1]*valgt[2]*valgt[3]>0){
                for (i=1;6>i;i++){
                    akt.options[i].value = ""+i;
                    akt.options[i].text = valg5[valgt[0]-1][valgt[1]-1][valgt[2]-1][valgt[3]-1][i-1];
                }
            }
    }
}
</SCRIPT>

</HEAD>

<BODY ONLOAD="init()">
<H1>5 afhængige select-boxe</H1><BR>
<HR STYLE="border:dashed;font-stretch:wider;color:#000;"</HR>
<FORM ID="minForm" NAME="minForm">
<BR>
<BR>
<SELECT NAME="minSelect0" ID="minSelect0" ONCHANGE="change(1)">
    <OPTION VALUE="">-- Vælg her --<BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
</SELECT><BR><BR>
<SELECT NAME="minSelect1" ID="minSelect1" ONCHANGE="change(2)">
    <OPTION VALUE="">-- Vælg her --<BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
</SELECT><BR><BR>
<SELECT NAME="minSelect2" ID="minSelect2" ONCHANGE="change(3)">
    <OPTION VALUE="">-- Vælg her --<BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
</SELECT><BR><BR>
<SELECT NAME="minSelect3" ID="minSelect3" ONCHANGE="change(4)">
    <OPTION VALUE="">-- Vælg her --<BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
</SELECT><BR><BR>
<SELECT NAME="minSelect4" ID="minSelect4" ONCHANGE="">
    <OPTION VALUE="">-- Vælg her --<BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
    <OPTION VALUE=""><BR>
</SELECT><BR><BR>
<BR>
<BR>
<BR>
</FORM>
<BR>
<BR>
</BODY>

</HTML>

hth
jes '-)
Avatar billede smilus Nybegynder
11. juni 2003 - 20:34 #7
Det virker jo, og dit svar er accepteret! Men jeg skal vist have det ind med skeer:
Hvordan ser nedenstående kombination ud?
Det er jo kun 3 kombinationer:

Box 1        Box 2        Box 3   
1. Årstid    2.1 efterår    3.1.1 oktober   
            2.2 forår      3.2.1 april
                            3.2.2 maj
Avatar billede smilus Nybegynder
11. juni 2003 - 20:36 #8
roenving, hvordan kan jeg i øvrigt give dig de sidste 40p op til de 100p, som jeg stillede i udsigt?
Avatar billede roenving Novice
11. juni 2003 - 21:07 #9
Det løb er kørt i det her spm !-)

Du kunne have forøget pointtallet før du accepterede ...

-- og så kan du oprette et nyt spm her i kategorien med overskriften: Points til roenving og så kopiere henvisnigen fra adresselinjen (http://www.eksperten.dk/spm/363512 ) ind i teksten.

Læg mærke til den tekst jeg har skrevet foroven som kommentar, det bliver omkring sådan:

valg1 = ['Årstid','Noget Andet'[;
valg2 = new Array();
valg2[0] = ['Forår','Sommer','Efterår','Vinter'];
valg2[1] = ['Noget1','Noget2','Noget3','Noget4'];
valg3 = new Array();
valg3[0] = new Array();
valg3[0][0] = ['Marts','April','Maj'];
valg3[0][1] = ['Juni','Juli','August'];
valg3[0][2] = ['September','Oktober','November'];
valg3[0][3] = ['December','Januar','Februar'];
valg3[1][0] = ['Noget1nogetAndet1','Noget1nogetAndet2','Noget1nogetAndet3','Noget1nogetAndet4'];
valg3[1][1] = ['Noget2nogetAndet1','Noget2nogetAndet2','Noget2nogetAndet3','Noget2nogetAndet4'];

osv ...

-- og tak for points ;~}
Avatar billede Slettet bruger
12. juni 2003 - 20:30 #10
Tak for korrektionen i øvrigt, roenving. Det kan være jeg kan bruge det til mat-eksamen i morgen. :)
Avatar billede roenving Novice
12. juni 2003 - 23:17 #11
>>phoenixv *gg*
Avatar billede Slettet bruger
13. juni 2003 - 13:13 #12
Det kunne jeg nu ikke, men det gik godt alligevel! :)
Avatar billede roenving Novice
13. juni 2003 - 13:29 #13
Det lyder zq da rart -- over forventningerne ?O)
Avatar billede Slettet bruger
13. juni 2003 - 13:55 #14
13, så ja. :)
Avatar billede roenving Novice
13. juni 2003 - 14:01 #15
Uha da ...
*+)

-- det lyder som om der bliver dømt fredag lidt senere !o]
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