Avatar billede arentoft Nybegynder
03. juni 2003 - 11:18 Der er 8 kommentarer og
1 løsning

Dynamisk oprettelse af OPTGROUP's i en SELECT?

Hejsa!

Med IE 6.0 kom muligheden for at benytte OPTGROUP's i en SELECT box. Derfor vil jeg gerne dynamisk add'e disse - er der nogen der har et eksempel på dette?

Jeg har selv forsøgt at lave 2 nestede loops, ét ydre, der opretter og add'er OPTGROUP's elementerne og ét indre loop, der tilføjer de tilhørende OPTION elementer. Dette virker bare ikke ....

Er der nogen, der har et eksempel, der virker?

Venlig hilsen

/arentoft/
Avatar billede roenving Novice
03. juni 2003 - 11:40 #1
Må vi se ...

-- har ikke selv haft fat i det på den måde, men det lyder da interessant -- det kunne være du kunne vise hvad du havde ;O)
Avatar billede arentoft Nybegynder
03. juni 2003 - 11:47 #2
Gerne, men det virker somsagt ikke ...

<!--
var oNodes = G_xmlTypes.selectNodes("//object");
for (var i = 0; i < oNodes.length; i++) {
    var oNode = oNodes[i];
    var oGrp = General.addOptionGrp(selBox, oNode.selectSingleNode("./shortname").text);
    var oOptions = oNode.selectNodes("./properties/property");
    for (var j = 0; j < oOptions.length; j++) {
        var oOption = oOptions[j];
        General.addOption(selBox, oOption.getAttribute("propertyid"), oOption.selectSingleNode("./shortname").text);
    }
}

// Dette er taget fra mit generelle kodebibliotek

var General = new Object();
     
General.addOption = function (selectId,value,desc) {
    var opt = document.createElement("OPTION");
    opt.text = desc;
    opt.value = value;
    selectId.add(opt);
    return opt;
}

General.addOptionGrp = function (selectId, desc) {
    var opt = document.createElement("OPTGROUP");
    opt.label = desc;
    selectId.add(opt);
    return opt;
}
-->

I HTML koden har jeg en tom SELECT med id'en "selBox".

Håber det kan give en ide om hvad det er jeg vil?

/arentoft/
Avatar billede roenving Novice
03. juni 2003 - 11:57 #3
-- jeg sad og kiggede efter objektet bagved selBox -- det har du måske defineret uden for den kode du har dumpet .-)

-- men så skulle jeg lige have opfrisket .add -metoden og fandt så, at det er en metode på options-arrayet, og så skulle din kode vel være

selectObjekt.options[index].add(nytObjekt, nytIndex)
Avatar billede arentoft Nybegynder
03. juni 2003 - 12:27 #4
Jeps - selBox er ikke med i koden, men er som jeg skrev blot et tomt select element.

Jeg har allerede luret lidt på det med .options.add(), hvilket heller ikke virkede - men jeg har ikke forsøgt at benytte [index] - hvilket jeg lige vil teste nu.
Avatar billede arentoft Nybegynder
03. juni 2003 - 12:52 #5
Det ser desværre ikke ud til at man kan bestemme hvori collectionen "options" man ønsker at indsætte sin OPTGROUP, hvilket vil sige at den fejler hvis man forsøger at diktere et index. :-(

/arentoft/
Avatar billede roenving Novice
03. juni 2003 - 13:01 #6
MSDN ser ellers ud til at anbefale den metode, du forgæves havde prøvet ?-(

http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/add.asp

<SELECT ID="oSelect">
  <OPTION VALUE="1">One</OPTION>
</SELECT>

<SCRIPT>
var oOption = document.createElement("OPTION");
oSelect.options.add(oOption);
oOption.innerText = "Two";
oOption.value = "2";
</SCRIPT>
Avatar billede arentoft Nybegynder
03. juni 2003 - 13:11 #7
Ved jeg godt, deres metode virker skam også fint, bare ikke når man dynamisk ønsker at indsætte flere OPTGROUP's med underliggende OPTION's. Mine erfaringer siger at det i princippet er lige meget om man benytter .options.add() eller blot .add()

Problemet er at efter den første OPTGROUP er indsat komme de resterende til at ligge nested inde i denne <optgroup><optgroup><optgroup/><optgroup/> hvilket de ikke må!
Avatar billede arentoft Nybegynder
03. juni 2003 - 13:49 #8
Jeg har endelig fundet løsningen!

Modsat et option element kan optgroup godt indsættes i en select vha. insertAdjacentElement metoden. Det betyder at generelle funktion skal se sådan her ud:

General.addOptionGrp = function (selectId, desc) {
    var opt = document.createElement("OPTGROUP");
    opt.label = desc;
    selectId.insertAdjacentElement("beforeEnd", opt);
    return opt;
}

Denne løsning er normalt ikke mulig med et option element, da man her skal bruge add metoden.

Jeg takker dog for inspirationen roenving!

/arentoft/
Avatar billede roenving Novice
03. juni 2003 - 13:54 #9
Velbekomme '-)
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