Avatar billede Slettet bruger
25. oktober 2005 - 18:14 Der er 10 kommentarer og
1 løsning

Angående overføring af værdi til selectbox

Jeg har et par spørgsmål med to select bokse hvor jeg gerne skulle flytte værdierne fra den ene til den anden. Jeg vil igennem spørgsmålene tage udgangspunkt i følgende side:

http://pub.cypermann.dk:3080/pub/boks.html

Spm 1.

Når man vælger "Ny side" og trykker tilføj, tilføjes den nederst i den anden selectbox. Er det muligt ved f.eks. at vælge f.eks. "Hovedside" i selectboxen "sti", derefter trykke Tilføj - og så bliver "Ny side" tilføjet umiddelbart under Hovedside.

Spm 2.

felterne i boksen "sti" har værdier fra 1-6. Hvis det kan lade sig gøre at tilføje "Ny side" under en hvilken som helst vilkårlig side, er det så muligt at punktet der bliver rykket en tand ned samt alle ned efter får + 1 i værdi, og "Ny side" antager den værdi fra den plads den bliver placeret på?


Da jeg ikke ved hvordan jeg skal gribe det an, samt mit javascript er meget rusten, ville eksempler eller eventuelt en færdig kode være perfekt.
Jeg starter med 100 points, men da jeg ikke ved hvad det kræver, kan dette hæves til 200.
Avatar billede roenving Novice
26. oktober 2005 - 06:34 #1
Ja til begge spørgsmål, men jeg skal lige forstå formålet med dine bokse !-)

-- det du har i den anden boks ligner strukturen i f.eks. en web-side, så det kunne være, at det var hensigtsmæssigt at kunne indsætte sider med et bestemt niveau ...

Eksempel:

Hovedside
--Underside
--Underside
----Under underside
----Under underside <-- Denne er valgt i boks 2
--Underside

-- kan give 3 fornuftige muligheder:

Hovedside
--Underside
--Underside
----Under underside
----Under underside
--Underside <-- mulighed 1
--Underside

Hovedside
--Underside
--Underside
----Under underside
----Under underside
----Under underside <-- mulighed 2
--Underside

Hovedside
--Underside
--Underside
----Under underside
----Under underside
------Under under underside <-- mulighed 3
--Underside

-- og hvis man så har valgt mere end een i den anden boks, hvad skal der så ske ?-)
Avatar billede roenving Novice
26. oktober 2005 - 06:36 #2
Iøvrigt kunne jeg forestille mig, at du navngav mulighederne, så de understøttede hierarkiet, så de altså ikke hed 1-6 i værdi, men: 0, 1, 2, 2.1, 2.2 og 3 !o]
Avatar billede Slettet bruger
26. oktober 2005 - 10:14 #3
Det er korrekt at det er strukturen over et website, hvor jeg gerne skal kunne indsætte en ny side.

Det ville faktisk være smart at navngive efter dit forslag.
Avatar billede Slettet bruger
26. oktober 2005 - 11:17 #4
Det er rigtig at det kan give 3 muligheder.
I den boks med "ny side", vil der altid kun være en side at kunne overføre til den anden. Egentlig kunne man blot skjule boksen og lade siden være selected fra starten, og så blot have knappen overfør.

For at lave en ny side, vil jeg lave en slags trin for trin. Så jeg havde overvejet at inden man kommer til select boksen, vælger man hvilken slags side man vil indsætte.
Hvis man vælger at ville indsætte f.eks. en underside, ville jeg så kun vise de sider den kan lægges ind under.
Men så bliver hirakiet lidt ødelagt hvis man vælger at lave det ud fra 1,2,2.1 osv.
Avatar billede Slettet bruger
30. oktober 2005 - 18:04 #5
jeg har nu valgt at gå fra to select bokse til en select boks.

Når jeg har valgt en værdi, og vil indsætte det nye objekt nedenunder det valgte benytter jeg eksempelvis:

Sel.options[Sel.selectedIndex+1] = new Option('foo');

Men dette overskriver jo den værdi der allerede stod på selectedIndex+1.
Jeg har nu siddet og bøvlet med en for løkke, men kan ikke få den til at spille.
Hvordan rykker jeg alle værdier der er efter den valgte værdi en tand, således jeg kan indsætte den nye værdi ?
Avatar billede roenving Novice
30. oktober 2005 - 21:21 #6
for(i=Sel.length;i>Sel.selectedIndex+1;i--){
  Sel.options[i] = new Option(Sel.options[i-1].value,Sel.options[i-1].text);
}
Sel.options[Sel.selectedIndex+1] = new Option('foo');
Avatar billede Slettet bruger
30. oktober 2005 - 23:13 #7
ah ja, selvfølgelig :)
Du tager den bagfra.

btw så er det new Option(text, value);

Nu er det jo ikke så tit man får lov til at rette dig i JS, så jeg vil da benytte chancen :)

jeg arbejder videre på løsningen, kommer sikkert et par mindre spørgsmål til, og så kan du få nogle points.
Avatar billede Slettet bruger
31. oktober 2005 - 18:18 #8
Nu er jeg kommet frem til følgende, ved at google lidt, og sammensætte diverse scripts og rette i dem hist og her.

http://pub.cypermann.dk:3080/pub/boks.html

Jeg fandt det mere brugervenligt at ved oprettelse af en ny side blot at smide den ind nederst i selectboksen, og ved brug af 4 taster at kunne flytte enten op/ned eller ind/ud.

Den nye side vil så altid starte i niveau 1, ligesom Forsiden og Profil.
Op og ned funktionen virker ganske udemærket, dog kunne jeg godt tænke mig at hvis man eksempelvis valgte "arbejde" og flyttede en tand op, ville den automatisk rykke underpunkterne til arbejde med op. Desuden skal alle disse punkter så rykkes op over "personen bag", da man jo rykker et niveau 2.

Rykker man "personen bag" op, vil dens underpunkter og punktet selv komme til at ligge under "forside".

Når dette virker er der styr på op og ned funktionen.

Men hvordan jeg rykker vandret har jeg ingen anelse om? - og har ikke kunne finde noget på google. Når man skal rykke vandret gælder det naturligvis som op/ned, at underpunkterne skal følge med det punkt man rykker, hvis der er nogle.
Hvis man forsøger at rykke "Referencer" en tand længere ind (->) skal dette heller ikke kunne lade sig gøre, da der jo så ikke vil være et niveau 3 den kan passe ind under.

Jeg håber det er forståeligt, og at du kan give et eksempel på hvordan jeg kan gøre det. Points skal jeg nok hæve når vi kommer dertil.
Avatar billede Slettet bruger
09. november 2005 - 18:19 #9
Jeg kunne forestille mig at det med at flytte felter med underpunkter vel egentlig blot skulle være et multiarray.
Men det med at indrykke, kan jeg ikke lige gennemskue.

Kan du hjælpe mig lidt på vej?
Avatar billede Slettet bruger
10. november 2005 - 18:16 #10
Det med et multi array kunne jeg ikke helt få til at hænge sammen.
Men ved hjælp af name attribute kan jeg nu få makeret de elementer der har samme attribute ved hjælp af nedenstående kode.

Dog er dette jo kun brugbart hvis man maker et niveau 2. Har i nogen anelse om hvordan jeg får det optimeret?


function MultiSelect(obj) {
    selValue = obj.options[obj.selectedIndex].getAttribute('name');
       
    for (var i=0; i<obj.options.length; i++) {
        if(obj.options[i].getAttribute('name') == selValue) {
            obj.options[i].selected = true;   
        }
    }   
}
Avatar billede Slettet bruger
29. januar 2006 - 21:01 #11
Jeg løste problemet vha PHP.
Det er dog ikke så flot, men det virker :)
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