Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Lige præcis! Det er den øverste med 2 bokse. Hvis jeg vælger "View Page Source" får jeg en ordenligt smøre som jeg ikke forstå meget af både med source til 2 bokse og 3 bokse.
Scriptet er, egentlig ganske smart, bygget til at kunne behandle uendelig mange selectboxe - derfor ser scriptet så også temmelig uoverskueligt og bøvlet ud i forhold til hvis man bare skulle bruge to (har også set en anden løsning kun med to, som måske var lidt mere enkel, men kan ikke huske hvor den er mere).
Men så svært er det nu heller ikke at bruge den, men jeg vil nu lige lave en lille guide alligevel: Hele scriptet er stort set bygget op omkring array'et arr, som indeholder oplysninger om det forskellige selectboxes værdier. Det er dette array du skal generere med din JSP-kode. Som du måske ved kan et array skrives sådan her: var arr = []; // det samme som var arr = new Array(); og det på denne form hele arrayet er bygget op på (du kan også vælge den "normale" måde, hvis du synes det er lettere. I hvert fald giver jeg et eksempel på det senere.
Array'et arr skal nu indeholde nogle "underarrayes", som er bygget op på denne måde: ["Værdi i 1. selectbox",[array med værdier i den anden selectbox]] Arrayet med værdierne til den anden selectbox er de værdier, som skal blive synlige hvis man vælger "Værdi i 1. selectbox". Så hvis du kigger på det samlede array: var arr = [ ["Valg 1",["2. valg 1 (1)","2. valg 2 (1)","2. valg 3 (1)"]], ["Valg 2",["2. valg 1 (2)","2. valg 2 (2)","2. valg 3 (2)","2. valg 4 (2)"]], ["Valg 3",["2. valg 1 (3)","2. valg 2 (3)","2. valg 3 (3)","2. valg 4 (3)","2. valg 5 (3)"]] ]; Kan du måske set, at når man vælger "Valg 1" i 1. selectbox, så kommer værdierne "2. valg 1(1), 2. valg 2 (1) osv. frem i anden selectbox.
Når du har lavet dette array, skal du sætte formene op. Først og fremmest gælder det om, at begge selectboxe har hver deres unikke ID, fx: <select name="sel1" id="sel1"> <option value="" selected>Vis alle</option> </select> <select name="sel2" id="sel2"> <option value="" selected ><-- Vælg --</option> </select> Navnet er mest til brug når du submitter formen. Når disse to selectboxe er lavet skal der kun tilføjes to ekstra events: <body onload="initSels()"> - som sørger for, at værdierne i selectbox 1 bliver vist fra starten.
<select name="sel1" id="sel1" onchange="createOpts(this,'sel1','sel2');"> - denne sørger for, at værdierne bliver ændret i selectboxen med id sel2 når man ændrer på selectbox 1. createOpts-funktionen kræver, at du skriver alle de id'er, på samtlige selectboxe der skal indgå i scriptet.
Hvis du har fattet det indtil nu så tillykke, for der er ikke mere (medmindre du vil forstå selve javascript-koden, for det tager nu længere tid at forklare). Hvis du stadig synes at array'et er bygget op på en forvirrende og træls måde, så kan det også skrives på andre måder fx: var arr = new Array(); arr[0] = ["Valg 1",["2. valg 1 (1)","2. valg 2 (1)","2. valg 3 (1)"]]; arr[1] = ["Valg 2",["2. valg 1 (2)","2. valg 2 (2)","2. valg 3 (2)","2. valg 4 (2)"]]; arr[2] = ["Valg 3",["2. valg 1 (3)","2. valg 2 (3)","2. valg 3 (3)","2. valg 4 (3)","2. valg 5 (3)"]];
eller den rigtig bøvlede, men måske mere forklarende måde: var arr = new Array(); arr[0] = new Array(); arr[0][0] = "Valg 1"; arr[0][1] = new Array(); arr[0][1][0] = "2. valg 1 (1)"; arr[0][1][1] = "2. valg 2 (1)";
tja, det kan du gøre, men det kan også bare sættes ind på siden som her. Hvis du vil have scriptet i en ekstern fil skal du flytte alt hvad der står mellem <script type="..."> og </script> ind i en fil og gemme den som <filnavn>.js. Så kan du hente den på din side ved at skrive: <script type="text/javascript" src="etellerandet.js"></script> og placer dette i din head-sektion.
txt skal angive navnet på array'et med alle værdierne. Dvs. du kan godt kalde array'et for selectArrayValues eller sådan noget, og så bare skrive txt = "selectArrayValues". Senere i scriptet kan du se, at der står ar = eval(txt). Hvilket betyder at ar bliver lig med array'et (eval() evaluerer tekst som javascriptkode).
Hvorfor roenving (som har lavet scriptet) har gjort det på den måde ved jeg egentlig ikke, men det er nok for at gøre scriptet lidt mere dynamisk. I teorien kunne man jo også bare skrive arr hele vejen istedet for at kopiere arrayet. Men smart er det jo hvis man gerne vil have ændret navnet på array'et til noget lidt mere beskrivende, så skal man kun ændre scriptet et sted :-)
næ vent- txt bruges faktisk også til lidt mere: for(i=0;num>i;i++){ txt+="["+(s[i].selectedIndex-1)+"][1]"; } Hvad den præcist bruges til kan jeg ikke lige overskue. Det er jo ikke noget helt enkelt script han har stykket. Man kunne jo håbe at roenving kiggede forbi på et tidspunkt - så kunne han nok give en lidt bedre forklaring på de enkelte dele ;-)
Tjah, jeg tror godt jeg kan forklare scriptet, men det tog en krig at lave det, og det tager i hvert fald en kampagne eller to at forklare det ...
-- grunden til eval-tingen på teksten er at det var en metode, jeg kunne overskue til at være ligeglad med hvor jeg var i arrayet (det er på nogle leder kernen i den totale dynamik !-)
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.