25. maj 2007 - 20:12Der er
18 kommentarer og 2 løsninger
appendChild fungerer ikke
Hej Eksperter.
Hvordan kan det være, at følgende kode ikke har effekt: ------------------------------------- alert('1'); newModul = document.createElement("img"); newModul.setAttribute("title","fed"); newModul.setAttribute("src","components/bold/images/bold_dk.gif"); newModul.setAttribute("onclick","ExecCommand('Bold',false);"); newModul.setAttribute("onmouseover","this.style.backgroundImage='url(skins/windows/hover.gif)';"); newModul.setAttribute("onmouseout","this.style.backgroundImage='';"); document.getElementById("tools").appendChild(newModul); alert('2'); ----------------------------------- De 2 alerts er en lille test. Den første vises, det gør den anden ikke.. Og den virker først, når jeg fjerner "document.getElementById("tools").appendChild(newModul);". Og af en eller anden grund også, når jeg retter denne til: "document.getElementsByTagName("head")[0].appendChild(newModul);"
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
scheisse.. ja, ikke engang: alert('1'); alert(document.getElementById("tools").id); alert('2'); virker.. den stopper efter 1eren.. hmm, kigger lige lidt på det..
Jeg laver en texteditor i JavaScript og ville gerne inkludere moduler fra en mappe kaldet "components" så automatisk som muligt. Det spurgte jeg så om her på Eksperten og fik følgende kode: --------------------------- var moduls = Array("bold","italic","underline");
for (i=0;moduls.length>i;i++) { newModul = document.createElement("script"); newModul.setAttribute("type","text/javascript"); newModul.setAttribute("src","components/" + moduls[i] + "/" + moduls[i] + ".js"); document.getElementsByTagName("head")[0].appendChild(newModul); } --------------------------- Men jeg synes ikke det virker, når jeg retter til andet end "getElementsByTagName("head")[0]".. :(
I hvert fald inkluderer denne kode fint til header.. Men jeg kan jo så ikke rigtig lægge alle disse inkluderede i en funktion, vel?
Doh.. Hvis jeg nu bare kører denne inkluderingskode til sidst i koden og ikke lige efter head'er.. :P Så kunne det jo være, den kendte andre elementer end head.. prøver lige :)
Ja, nu har jeg så fået den ind i "tools", men den ene ting er, at koden ikke længere er ligeglad, hvis moduler ikke findes (den brokker sig ret meget), og hverken onclick, onmouseover, eller onmouseout reagerer.. :S
Ja, tænk engang: elementer skal findes før de kan bruges. Du får vel nogle fejl - og så kan du tage dem derfra. getElementById aflevere en null, hvis elementet ikke findes.
-- forhåbentlig har du valgt en grundlæggende doctype, der understøtter 'den skøre snappers' måde at lave event-tildelinger på, men ellers er det jo ikke muligt at komme uden om egentlige 'xml-agtige' tildelinger med addEventListener/attachEvent-ting !-)
'addEventListener/attachEvent-tingen' er nu ikke spor XML-agtig. De seneste små 10 år har det været den måde, vi bør bruge event-listeners på. addEventListener hører til i DOM Level 1.
Hvis vi - som tilfældet burde være - fik en DOM-node returneret med document.getElementById, er det tilmed den eneste måde, vi kan sætte en listener på.
I stedet får vi returneret en 'hDtOmMl-eNlOeDmEent' ... en bastard mellem et HTML-element objekt og en DOM-node. Dét er årsagen til, at eksemplerne i (26/05-2007 22:59:10) på trods af standarderne stadig virker =)
/mvh </bole>
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.