Avatar billede KlausEC Nybegynder
12. januar 2010 - 13:04 Der er 3 kommentarer og
1 løsning

flytte options fra en select til en anden.

Jeg har to multi-select's.

<select id="meter_excluded" multiple="multiple">
<option selected="selected" value="">Ikke angivet</option>
<option value="0">akkumuleret</option>
<option value="1">kontinuer</option>
<option value="2">forbrug</option>
</select>

<select id="meter_included" multiple="multiple"></select>

Jeg vil så kunne flytte options mellem de to selects, som jeg lyster!, og har lavet en knap til hver vej.

<button type="button" onclick="includemeter();">= ></button>
<button type="button" onclick="excludemeter();">< =</button>

De to javascript metoder, ses her:

function includemeter() {
var excludedfield = document.getElementById('meter_excluded');
var includedfield = document.getElementById('meter_included');
   
for (var i = 0; i < excludedfield.options.length; i++) {
    if (excludedfield.options[i].selected)
    {
    var opt = new Option(excludedfield.options[i].text, excludedfield.options[i].value);
    includedfield.options[includedfield.options.length] = opt;
    excludedfield.options[i] = null;
    }
}
}

function excludemeter() {
var excludedfield = document.getElementById('meter_excluded');
var includedfield = document.getElementById('meter_included');
   
for (var i = 0; i < includedfield.options.length; i++) {
    if (includedfield.options[i].selected)
    {
        var opt = new Option(includedfield.options[i].text, includedfield.options[i].value);
           
    excludedfield.options[excludedfield.options.length] = opt;
    includedfield.options[i] = null;
    }
}
}

Så kommer mit problem:
Hvis jeg markerer flere options i en select for at flytte dem, kommer de ikke med, allesammen, kun nogle af dem. Jeg ville jo helst have at præcis dem, man markerer, kommer med.

Nogle guldkorn?
Avatar billede KlausEC Nybegynder
12. januar 2010 - 13:07 #1
jeg tænkte på, om det kan have noget at gøre med, at jeg sletter en option lige så snart, jeg har oprettet den i den anden? Dvs, at length attributten ændres mens for-løkken kører?
Avatar billede tjens Nybegynder
12. januar 2010 - 13:58 #2
#1 Det er sikkert derfor.

Kan det ikke klares med en i-- når du fjerner et element?
Avatar billede intenz Novice
12. januar 2010 - 13:58 #3
Problemet er det du selv skriver, du sletter elementerne mens løkken kører.

Jeg har rettet lidt i den og tilføjet et nyt array der gemmer de værdier der skal slettes, og de bliver så slettet efterfølgende. Jeg har kun lavet den ene funktion, du kan gøre det tilsvarende med den anden.


function includemeter() {
    var excludedfield = document.getElementById('meter_excluded');
    var includedfield = document.getElementById('meter_included');
    var move_fields = []; // nyt array
   
    for (var i=0; i < excludedfield.options.length; i++) {
        if (excludedfield.options[i].selected)
        {
            var opt = new Option(excludedfield.options[i].text, excludedfield.options[i].value);
            includedfield.options[includedfield.options.length] = opt;
            move_fields.push(i); // push nummeret til array
        }
    }

    for (var i=0; i < move_fields.length; i++) { // kør array og slet felter (tager højde for at rækkefølgen ændre mens vi sletter - derfor move_fields[i]-i.
        excludedfield.options[move_fields[i]-i] = null;
    }
}
Avatar billede KlausEC Nybegynder
12. januar 2010 - 14:09 #4
den godtager vi sq!

Jeg havde selv fusket med en løsning, der mindede MEGET om din, men da min lavede småfejl, bruger jeg din i stedet - det lader til at virke.

Tak for hjælpen folkens :)
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