Avatar billede farving Nybegynder
26. september 2006 - 20:47 Der er 20 kommentarer og
1 løsning

select.options.add()

Hej alle

Jeg sigger med et problem, da jeg har lovet at lave en lille javascript funktion til en ven... men jeg har snart prøve det hele...

Jeg har et stump kode tidligere der virker og det er NÆSTEN ens, det er noget navneværk til forskel... nogen der kan hjælpe med hvad fejlen er?

    for (k in tempArr) {
        var newOpt = document.createElement("option");
        newOpt.text = tempArr[k];
        if (IE) {objList.options.add(newOpt);}
        else {objList.options.add(newOpt, null);}
    }

tempArr indeholder et array, med nogle kalsser...
IE indeholder true eller false fra en tidligere variabel som tester efter om det er IE der bliver brugt...
objList, er den select som options'ne skal tilføjes til...

Mvh Carsten
Avatar billede elskermad.dk Nybegynder
26. september 2006 - 21:23 #1
kender ikke den options.add, men måske du bare kan:

for (k in tempArr) {
    var newOpt = document.createElement("option");
    newOpt.appendChild(document.createTextNode(tempArr[k]));
    objList.appendChild(newOpt);
}
Avatar billede roenving Novice
27. september 2006 - 12:49 #2
-- eller bruge appendChild !-)
Avatar billede elskermad.dk Nybegynder
27. september 2006 - 12:59 #3
det er vel os det jeg gør i min kode roenving? :)
Avatar billede roenving Novice
27. september 2006 - 13:13 #4
-- arg, din opbygning fik mig til at overse det, du i virkeligheden gjorde, selv ville jeg dog bruge en options text-property:

for (k in tempArr) {
    var newOpt = document.createElement("option");
    newOpt.text = tempArr[k];
    objList.appendChild(newOpt);
}
Avatar billede olebole Juniormester
27. september 2006 - 13:21 #5
<ole>

Hvad er det, I ikke kan få til at virke i eksemplet, vist i spørgsmålet? Det fungerer helt fint ... hvad det også bør  :)

<select id="foo">
    <option value="">jiljkj 1</option>
    <option value="">jiljkj 2</option>
    <option value="">jiljkj 3</option>
</select>

<script type="text/JavaScript">
var o = document.getElementById("foo");
var newOpt = document.createElement("option");
newOpt.text = "yups";
o.options.add(newOpt)
</script>

/mvh
</bole>
Avatar billede olebole Juniormester
27. september 2006 - 13:22 #6
- 'options' er en collection ... og sådan et dyr har altid en add-metode  :)
Avatar billede olebole Juniormester
27. september 2006 - 13:25 #7
add-metoden kan evt forsynes med endnu et argument, der angiver, hvor i rækken den nye option skal indsættes:
    o.options.add(newOpt, 1);
Avatar billede farving Nybegynder
27. september 2006 - 15:44 #8
problemet er at den skriver at options er null eller ikke et object...

Som skrevet så har jeg præcis samme kode tidligere hvor det virker som det skal...

Mvh Carsten
Avatar billede olebole Juniormester
28. september 2006 - 10:06 #9
Mon ikke, du kalder scriptet, inden select-elementet er tegnet i browseren?  ;o)
Avatar billede olebole Juniormester
28. september 2006 - 11:18 #10
- prøv f.eks. at vente med at kalde scriptet, til siden er færdig med at loade ... på 'onload'  :)
Avatar billede olebole Juniormester
28. september 2006 - 11:21 #11
Læg mærke til, at eksemplet (27/09-2006 13:21:09) virker, mens dette fejler:


<script type="text/JavaScript">
var o = document.getElementById("foo");
var newOpt = document.createElement("option");
newOpt.text = "yups";
o.options.add(newOpt)
</script>

<select id="foo">
    <option value="">jiljkj 1</option>
    <option value="">jiljkj 2</option>
    <option value="">jiljkj 3</option>
</select>

- fordi elementet ikke er tegnet, når scriptet kaldes
Avatar billede farving Nybegynder
28. september 2006 - 16:25 #12
Hele funktionen som bliver kaldt af en eksisterende select er her... det bliver oprettet i den rigtige rækkefølge så vidt jeg ved...

function createDropDown(Name) {
    if (!Name) {return false;}
    if (!created) {
        var newSel = document.createElement("select");
        newSel.name = Name;
        document.body.appendChild(newSel);
        created = true;
        createDropDown(Name);   
    }
    var objList = document.forms[0].Name;
    if (created) {
        while (objList.options.length) {
            listObj.options.remove(0);
        }
    }
    tempArr = eval(Name).arrClass;
    for (k in tempArr) {
        var newOpt = document.createElement("option");
        newOpt.text = tempArr[k];
        if (IE) {objList.options.add(newOpt);}
        else {objList.options.add(newOpt, null);}
    }
}

Mvh Carsten
Avatar billede farving Nybegynder
28. september 2006 - 16:26 #13
Og her er funktionen som bliver loadet i onLoad og som virker som den skal:

function preLoad() {
    var objList = document.forms[0].School;
    for (k in arrSchools) {
        var newOpt = document.createElement("option");
        newOpt.text = arrSchools[k];
        if (IE) {objList.options.add(newOpt);}
        else {objList.options.add(newOpt, null);}
    }
}

Mvh Carsten
Avatar billede olebole Juniormester
02. oktober 2006 - 12:26 #14
Dette lader sig ikke gøre i IE:
    var newSel = document.createElement("select");
    newSel.name = Name;

Hvis du derfor prøver at kalde en select, oprettet på denne måde, med adresseringen:
    var objList = document.forms[0].School;

- vil det gå galt.
Prøv i stedet med denne syntaks:
    var newSel = (IE) ? document.createElement("<select name=\""+Name+"\"></select>") : document.createElement("select");
    newSel.name = Name;

- så vil jeg tro, det virker. Læs evt. mere om problematikken her:
    http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/createelement.asp
Avatar billede farving Nybegynder
02. oktober 2006 - 20:27 #15
Kan ikke få det til at greje sig som jeg vil, har prøver at oprette elementet som du skriver, men den siger stadig at options er null eller ikke et object...

Det sjove er at det ser faktisk ud som om den får oprettet selecten rigtigt, men indeholder bare ikke nogen options funktion...

Jeg har endvidere rettet det så den nye select bliver child til formen i stedet for body'en...

Men intet synes at virke...

Mvh Carsten

P.S. Microsofts side gav ikke rigtigt noget hjælp for mig.
Avatar billede farving Nybegynder
02. oktober 2006 - 20:29 #16
jeg ville lige prøve noget sjovt...

skrev:

alert(objList);

lige efter den fik "stien" dertil, men den udskrev bare "undefined", hvor den plejer at spytte noget object ud i stedet...

Hvis det er til nogen hjælp

Mvh Carsten
Avatar billede olebole Juniormester
03. oktober 2006 - 09:06 #17
Jeg er nok nødt til at se hele koden. Kan du ikke lægge et link ... evt. bare til et eksempel?  =)
Avatar billede olebole Juniormester
03. oktober 2006 - 09:12 #18
- oooooops  :D
    var objList = document.forms[0];

- eller:
    var objList = document.forms[Name];

... så virker det  ;o)
Avatar billede farving Nybegynder
03. oktober 2006 - 10:18 #19
http://carsten.farving.dk/dropdown.html

Og nej, ændrer ingenting med de ændringer...

Mvh Carsten
Avatar billede farving Nybegynder
29. oktober 2006 - 23:04 #20
Fandt ud af fejlen...

Scriptet kunne af en eller anden grund ikke finde ud af at oprette et nyt <select> og bruge den...

Endte med at jeg bare oprettede den fra starten af og så virkede det...

Hvis nogen er interesseret i kildekode så må de lige skrive...

Mvh Carsten
Avatar billede farving Nybegynder
29. oktober 2006 - 23:05 #21
Forresten, Ole, ville du have nogle point for din hjælp?

Mvh Carsten
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