02. juni 2008 - 00:15Der er
21 kommentarer og 1 løsning
Hvordan opretter man en select box med createElement?
Hejsa,
Er der nogen der kan hjælpe med at indsætte:
<option value="x">x</a> i min select.
Jeg har pt. følgende kode (virker fint nok): the_select = document.createElement('select'); the_select.setAttribute('name', 'material_name[]'); document.getElementById("materials_div").appendChild(the_select);
Jeg vil nu have tilføjet options til min select, og har prøvet følgende som _ikke_ virker:
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
the_select_option = document.createElement('option'); the_select_option.setAttribute('value','1'); the_select_option.appendChild( document.createTextNode("En eller anden tekst") );
- men du er i øvrigt absolut nødt til at have en IE under Windows, hvis du vil skrive til WWW. Ellers har du ingen anelse om, hvordan dine sider ser ud hos laaaaaangt størstedelen af nettets brugere ;o)
Indsæt alle options, før du append'er select'en til 'materials_div'.
Hvis du f.eks. skal have sat en onchange handler på select elementet, bør denne dog først sættes _efter_, select elementet er appended til 'materials_div'.
Skal man lave mange form kontrol elementer, vil en wrapper funktion nok være en god idé. Jeg har lige skrevet en (hvis jeg skal sige det selv) ret fiks én af slagsen:
function createNamedElm(sTag, sName) { var sUa = navigator.userAgent.toLowerCase(); createNamedElm = sUa.indexOf("msie")>-1 && sUa.indexOf("opera")<0) ? ie : ff; return createNamedElm(sTag, sName); function ie(sTag, sName) { return document.createElement("<"+sTag+" name='"+sName+"'>"); } function ff(sTag, sName) { var o = document.createElement(sTag); o.setAttribute("name", sName); return o; } }
Det fikse er, at når funktionen afvikles første gang, tjekkes for browsermærke. Er det en IE, skiftes indmaden af funktionen 'createNamedElm' ud med indmaden af funktionen 'ie'. Ellers skiftes indmaden af funktionen 'createNamedElm' ud med indmaden af funktionen 'ff'. Så snart det er sket, kalder funktionen sig selv og returnerer resultatet til det oprindelige kald.
Din kode vil så se sådan ud (udover funktionen ovenfor):
var the_select = the_select_option = null; the_select = createNamedElm("select", "material_name[]"); the_select_option = document.createElement('option'); the_select_option.setAttribute('value','1'); the_select_option.appendChild( document.createTextNode("En eller anden tekst") );
Det må jeg nok sige olebole, du har virkelig hjulpet mig enormt, mange tak (bukker).
Jeg har et lille spørgsmål eller måske nærmere et ønske.
I FF ser det helt perfekt ud, i IE ser det også ud som det skal, men hver gang jeg trykker på min knap for at tilføje nye select bokse i min div boks der er 225px bred, ligger de sig ved siden af hinanden i IE (og deraf ødelægger designet), hvor i FF er de under hinanden som jeg ønsker.
Er det noget du ved om det er en fejl i IE, eller om man måske skal lave en: createElement('br'); (som jeg ikke lige synes virker)
Sig endelig til hvis du synes det kræver et nyt spørgsmål eller lignende.
Virker den fint i IE og i FF - men i Opera(i hvert fald mini) ser det ud som om ingen optgroup findes (viser kun options) - har du et ekspert(en)råd der?
Virker scriptet i Opera Mini? Hvis det gør, kunne du måske sætte en baggrunds- og forgrundsfarve på din 'optgroup' option i stedet. Det virker i hvertfald i IE =)
mclemens >> vi kan ikke se, om det er font stylingen eller scriptet, der ikke virker i Opera Mini. I IE virker scriptet, men ikke font stylingen. Styling af bag- og forgrundsfarve virker dog i IE. Derfor spørger jeg ;o)
Ja ellers tak for forslaget - jeg prøver med det jeg har nu, og ser hvor det bringer mig, ellers vender jeg sikkert frygteligt tilbage :)
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.