21. januar 2003 - 16:50Der er
30 kommentarer og 1 løsning
Oprettelse af flere <Select> ud fra Array
På en side skal brugeren kunne vælge op til 9 forskellige kategorier en side kan være tildelt. Der findes ca. 2000 kategorier. Pt. laver jeg de 9 select's fra ASP så de findes i HTML'en og skal overføres fra serveren. Det tager en helvedes tid.! Jeg ville gerne lave et JS array i ASP og så kalde en funktion som så kan fylde de enkelte selects op. Det skal være sådan at jeg kan specificere hvilken select der er target, samt hvilken der er SELECTED. (der er både en Value og en optiontekst til hver option. <option value='12345678'>Taxi og vognmænd</option>
Giver det her mening. ?
Min tanke
function fillSelect(sname, sel) { js her }
onLoad="fillSelect('kode1',102564)
Håber på at en af jer genier kan hjælpe evt. kender et link.
Nej, der er oprettet 9 tomme selects. "kode1","kode2",..."kode9"
Så vil jeg lave js arrayet i ASP og kalde funktionen 9 gange, med navnet på den select der skal fyldes samt hvilket select.value der skal være Selected.
>bearhugx, så kan jeg nøjes med at indsætte en værdi i de 9 js kald. Meget hurtigere og mindre at overføre fra serveren.
>phoenixv, fordi at når der er 2000 kategorier kan de ikke overskue hvilke kategorier der er valgt i en select multiple. Jeg har ellers overvejet det.:)
>bearhugx, din funktion sætter jo godt nok hvilken en der er selected, men problemet er at den først skal kopiere alle værdierne fra et array ned i den option som funktionen kaldes med.
Jeg laver 9 tomme selects: <select name="kode1"></select>...<select name="kode9"></select>. Samtidig laver jeg et JS array med alle værdierne som skal være i ALLE 9 selects. Men for at kunne indstille hvilken en der er slected i hver select, skal denne funktion kaldes 9 gange, med henholdsvis navnet og værdien for hver sleect. JS Funktionen skal så kopiere alle værdierne (select.value, select.text) ned i select "kode9" og når den støder på den som jeg har sendt med som værende selected "formitem.selected = true;"
ET af problemerne er bare at jeg ikke ved hvordan jeg 1. opretter et array, 2. henter værdierne derfra. Det skal jo være et 2dimensionelt array, med plads til både .value samt .text
mvh Mark (som skal lave mad til familien nu og er tilbage om 2 timer!;)
De to arrays har jeg skrevet pænt for overskuelighedens skyld. Når du skriver dem ud i ASP, kan du naturligvis bare skrive dem på én linie. Det vil spare udskrivningstid og fylde betydelig mindre i download. Hvis ikke din database opdateres hele tiden (hvert 5. minut eller sådan), ville jeg udskrive en statisk fil med disse arrays, hver gang databasen opdateres. Denne fil skal så bare inkluderes i den HTML-fil, brugeren får serveret. Det vil tage en enorm belastning af din database og dit site vil performe voldsomt meget bedre - og gøre brugeroplevelsen tilsvarende bedre. /mvh
Det kunne vist være at jeg skal beskrive funktionaliteten. Sitet indeholder en masse firmaoplysninger, alle disse firmaer har mellem 1 og 9 kategorier tilvalgt. I et administrationsdel kan brugeren/ejeren ændre/tildele en eller flere kategorier til et firma. Eftersom at der allerede ER tildelt kategorier, er det nødvendigt at jeg kan vælge hvilken en kategori for hver enkelt select der er "selected", altså valgt på forhånd. !! Der er nøjagtig de samme option i alle 9 selects, de er altså 100% ens, undtaget hvilken en der er selected !!
Grunden til at jeg gerne vil nøjes med at lave et array var for at spare CPU'kraft, men der vil blive ændret en del i DB'en.
Det er altså nødvendigt at jeg kan kalde en funktion, både med navnet SAMT med hvilken en option der skal være "selected" for hver enkelt select.
Måske er det fordi jeg ikke forstår dit script ole, hvor fortæller jeg hvilken option der er selected ?
>olebole. Er det muligt at du kunne ændre i dit script, således at der kun er 1 array, det indeholder så alle værdierne. Scriptet kan så modtage 2 parametre, 1. Navnet på den select som skal udfyldes, 2. værdien på den option som skal være selected. ?
Nemlig - og ret denne linie også: for (i=0; i<2; i++) { // 2 for antallet af selects
En lille forklaring:
function fillSel(inx) { // Definer, hvilken select, der skal fyldes: var s = document.f.elements["kode_"+inx]; // Gå array'et igennem: for (j=0; j<k.length; j++) { // Dan en option for hvert element i array'et, // der jo også er et array med to elementer: var opt = new Option( k[j][1], k[j][0] ); // Hvis array-elementets (det aktuelle lille array) // er lig med den sInxs-værdi, der hører til selecten, // sættes denne option som selected: if ( sInxs[inx]== k[j][0]) opt.selected = true; // Den nydannede option indsættes i select-boksen på sidste plads s.options[s.length] = opt; } }
Antallet af elementer i 'sInxs' skal passe med antallet af selects i formen. Det samme gælder denne linie: for (i=0; i<2; i++) { // 2 for antallet af selects Dine selects skal være navngivet rigtig.
Jeg takker og vil lige pointere, at grunden til pelkjaer her blandede sig ikke var 'nævenyttighed' eller trang til at gøre sig bemærket ... jeg bad ham selv om en coAdmin-vurdering og kommentar over ICQ ;o)
OK, undrede mig også over at den bemærkning kom ind fra sidelinjen :-)
Synes godt om
Ny brugerNybegynder
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.