Toon posts:

[JS] Probleem met move-up-down functie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende code samengesteld, waarbij je in een selectbox:
een item aan kunt klikken en vervolgens 1 plaats omhoog/omlaag kunt
verplaatsen. (geen kunst). De bedoeling is echter dat hij na deze actie
het verplaatste item weer selected maakt. DAT LUKT, maar alleen
bij Moveup; bij Movedown, gooit-ie het hele item naar de onderste rij.
Vaag. Want als je alleen de regel
dbox.options[i+1].selected=true;
weglaat, dan doet ie de functie (omlaag) wel goed.
Wat doe ik verkeerd?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function Moveup(dbox) {
    for (i = 0; i < (dbox.options.length); i++) {
        if (dbox.options[i].selected && dbox.options[i] != "" && dbox.options[i] != dbox.options[0]) {
            var tmpval = dbox.options[i].value;
            var tmpval2 = dbox.options[i].text;
            dbox.options[i].value = dbox.options[i - 1].value;
            dbox.options[i].text = dbox.options[i - 1].text
            dbox.options[i-1].value = tmpval;
            dbox.options[i-1].text = tmpval2;
            for(j=0; j < (dbox.length); j++) {
                dbox.options[j].selected=false;
            }
            dbox.options[i-1].selected=true;
        }
    }
dbox.focus();
}

function Movedown(dbox) {
    for (i = 0; i < (dbox.options.length); i++) {
        if (dbox.options[i].selected && dbox.options[i] != "" && dbox.options[i+1] != dbox.options[dbox.options.length]) {
            var tmpval = dbox.options[i].value;
            var tmpval2 = dbox.options[i].text;
            dbox.options[i].value = dbox.options[i + 1].value;
            dbox.options[i].text = dbox.options[i + 1].text
            dbox.options[i+1].value = tmpval;
            dbox.options[i+1].text = tmpval2;
            for(j=0; j < (dbox.length); j++) {
                dbox.options[j].selected=false;
            }
            dbox.options[i+1].selected=true;
        }
    }
dbox.focus();   
}

[ Voor 3% gewijzigd door crisp op 27-10-2003 13:23 . Reden: code fix :) ]


Verwijderd

Dat komt op het eerste gezicht door het for(i=) loopje dat eromheen staat. Dat zet nadat je een optie op selected zet bij de volgende iteratie weer op deselected?

Verwijderd

Topicstarter
Dat for-loopje zet eerst alle items op deselected, en daarna (als-ie uitgeloopt is) zet-ie het verschoven item op selected.
Bij de Moveup() werkt ie WEL en bij de Movedown() NIET.

  • slm
  • Registratie: Januari 2003
  • Laatst online: 25-06 12:45

slm

zonder in je code te spitten lijkt me dat je je iteratie voor movedown moet omdraaien, dus groot --> klein ipv klein --> groot

To study and not think is a waste. To think and not study is dangerous.


Verwijderd

Topicstarter
slm schreef op 27 October 2003 @ 16:03:
zonder in je code te spitten lijkt me dat je je iteratie voor movedown moet omdraaien, dus groot --> klein ipv klein --> groot
... en als je dan naar de code kijkt, zie je dat dat ook zo gedaan is?! :P
dat is nou het gekke

  • slm
  • Registratie: Januari 2003
  • Laatst online: 25-06 12:45

slm

Verwijderd schreef op 27 October 2003 @ 16:37:
[...]
... en als je dan naar de code kijkt, zie je dat dat ook zo gedaan is?! :P
dat is nou het gekke
Je hoeft niet gelijk sarcastisch te doen, jij vraagt om hulp - niet ik. Het is gewoon pure logica. Niet om arrogant te doen, maar ik had niet zoveel tijd toen ik het las en dacht je met die korte post er toch mee te kunnen helpen.

Uitleg:
Je hebt het over een iteratie, ik zie in de gauwigheid dat je als iteratie een for-loop gebruikt, bij move-up gaat het goed , maar bij de movedown gaat fout. Het is dan niet meer dan logisch dat je iteratie in omgekeerde richting moet gaan bij movedown om het goed te krijgen.

Nu ik wat beter in je code kijk, klopt mijn redenatie dus ook. Als je bij movedown de eerste for loop inverteerd (dus van dbx.length-1 naar 0 gaat), gaat het wel goed. Ik zie trouwens ook dat je je huidige code evt kan handhaven en slechts een break; hoeft te plaatsen nadat het item is gevonden. Dan werkt het ook.

To study and not think is a waste. To think and not study is dangerous.


Verwijderd

Topicstarter
oke bedankt! ik zie het nu.
mijn opmerking was niet sarcastisch (bedoeld) :)
Pagina: 1