26. september 2006 - 20:47Der 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...
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); }
<script type="text/JavaScript"> var o = document.getElementById("foo"); var newOpt = document.createElement("option"); newOpt.text = "yups"; o.options.add(newOpt) </script>
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>
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);} } }
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);} } }
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;
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.
Forresten, Ole, ville du have nogle point for din hjælp?
Mvh Carsten
Synes godt om
Ny brugerNybegynder
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.