30. maj 2007 - 21:17Der er
15 kommentarer og 1 løsning
Oprette en select-menu med options ved brug af appendChild
Hej Eksperter.
Jeg har følgende kode, som opretter et billede inde i et element med id="tools": ---------------------------------------------- newModul = document.createElement("img"); newModul.setAttribute("title","Fed"); newModul.setAttribute("src","components/bold/images/bold_dk.gif"); newModul.onclick = function() { ExecCommand('Bold',false); }; document.getElementById("tools").appendChild(newModul); ---------------------------------------------- Men hvordan shaitan opretter jeg en select-menu, dvs. en <select> med en del forskellge <option>-tags inden i?
// laver select box var selectBox = document.createElement('select'); // array med options objekter var myOptions = [ new Option(1,'foo'), new Option(2,'bar'), new Option(3,'bas') ]; // tilføjer dine options for(i=0;i<myOptions.length;i++) { selectBox.options[selectBox.options.length] = myOptions[i]; } selectBox.selectedIndex = 0; // sætter selected til første element
Hvis det skal være i dette årtusindes kode, bør man bruge createElement og ikke new Option.
På den anden side, er ingen af de to store browseres editor noget, der hører til i dette årtusinde. I en online-editor kan man såmænd skrive, hvad somhelst uden koden bliver dårligere =)
Olebole >> Du siger, at der ikke er mange, der laver Ajax ordentligt. Og med det mener du blandt andet behandlingen af output fra det kaldte dokument.
Men er der også stor sandsynlighed for dårligt Ajax, når man blot kører en ASP-/PHP-side uden at få denne sides output igen? Dvs. eventuelt en side, som opdaterer en database, men ikke returnerer noget.
Naturligvis skal en sådan side ikke kaldes hvert 100. ms, men alligevel..
Ja, det er der i teorien. Problemerne opstår først og fremmest omkring DOM-koden - og ved evt OOP'ing i JavaScript ... og primært i IE. De samme problemer kan opstå (og gør det) ved alm. webkodning, hvor sider konstant skifter - men med AJAX tydeliggøres de ved, at der ikke skiftes side og beslaglagt hukommelse derfor ikke frigives. Ovenikøbet er der en hel del situationer, hvor beslaglagt hukommelse ikke engang frigives ved sideskift - men hvor browseren skal lukkes helt ned for at frigive hukommelse. I GoogleMaps API'et ligger således en metode, der skal kaldes på onunload for at frigive hukommelse og løser dette problem ... men det er desværre noget af et særsyn.
Bare en ting som, hvornår man append'er eventlisteners, har betydning. Sættes en eventlistener på et element, der endnu ikke er indsat i dokumentets DOM, opretter IE et lokalt script-scope omkring det 'fritsvævende' element. Når elementet indsættes i dokumentet og det derfor indgår i dokumentets almene scope, destrueres det lokale scope ikke - og udgør derfor en memory-leak. Morale: Sæt _altid_ eventlisteners, _efter_ et element er indsat i dokumentet!
Der er som sagt flere ting, der bør tages hensyn til og jeg agter at komme med en håndfuld artikler om emnet. Det begyndte med én, men greb om sig, da emnet _er_ meget omfattende. De er nok færdige hen på eftersommeren =)
PS: Brug _aldrig_ GET, når du bruger AJAX! Der sker noget caching på grund af de 'unikke' URL'er, hvilket kan blive ret katastrofalt ved f.eks. en chat-app, hvor kaldene er rigtig mange - og fortsætter i lange perioder.
Ja, ellers så lukker jeg da bare :) Men du får lige lidt tid til at gi' et svar..
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.