Avatar billede fluse Nybegynder
10. marts 2008 - 11:19 Der er 4 kommentarer og
1 løsning

Indsætte <fieldset> i en <form> vha. DOM

Jeg har besluttet mig for at lære lidt javascript, og syntes egenetlig det gik sådan okey... Men nu er jeg altså løbet ind i et problem, hvor jeg ikke kan forstå hvorfor det ikke virker.
Har prøvet en del forskellige ting, og nu er det altså ved at give mig grå hår. Så Lidt hjelp ville redde min dag. =D

Jeg har lavet (mere eller mindre ferdigt, nok mindre), et script der opretter et <fieldset> + nogle children og indsætter dem på en side sådan her:

document.body.insertBefore(tilfoj_fieldset, document.getElementById('placement'));

Og det virker fint nok, lige indtil jeg forsøger at paste scriptet fra min blanke side, ind i den formular hvor den ultimativt skal bruges... så holder den nemlig op med at virke. =(
Har kigget i firefox's fejlkonsol, og den forteller mig pænt "Node not found". Hvilket undre mig, da jeg jo "sigter" på min Node med dens ID... suk

Det skal lige siges, at det her er mit første forsøg på et egenligt funktionelt script, så lad værre at blive overrasket hvis det er et eller andet åndsvagt. hehe. jeg er dog overbevist om at det ikke er en stave/taste fejl.

Scriptet i sin helhed ligger her:
http://www.as-nielsen.dk/temp/js/

Og den der virker (inden den er indsat) her:
http://www.as-nielsen.dk/temp/js/test.html

Håber der er en der kan forklare mig hvorfor den ikke vil som den skal :D
Fluse
Avatar billede w13 Novice
10. marts 2008 - 16:14 #1
Det skyldes vist den simple grund, at du bruger:

document.body.insertBefore(...);

Men i modsætning til din testside har din rigtige side ikke "placement"-elementet liggende direkte i body. Læg mærke til, at dit placement-element ligger inde i en form.

Pointen er, at du ikke bare skal angive et "overelement", du skal angive det præcise "forældreelement". (Sig lige til, hvis jeg skal forklare det igen. :P)

Dvs., det kan løses dynamisk på denne måde:

document.getElementById("placement").parentNode.insertBefore(tilfoj_fieldset,document.getElementById("placement"));
Avatar billede olebole Juniormester
10. marts 2008 - 17:51 #2
<ole>

Du  skal desuden sætte dine attributter med setAttribute:
    INPUT_ELEMENT.setAttribute("id", "enEllerAndenID");

Til gengæld kan IE ikke sætte name attributter på elementer, hvorfor ingen af dine dynamisk oprettede elementer vil være at finde på serveren efter submit. I IE bør du derfor bruge denne uskønne/invalide form:
    var oInput = document.createElement("<input name='fooBar'>");

/mvh
</bole>
Avatar billede fluse Nybegynder
11. marts 2008 - 00:27 #3
Mange tak for jeres input, Det virkede sørme :D

Jeg kan godt se din pointe w13, men... præcis hvorfor du har lavet linien som du har, er jeg desværre ikke helt med på.

Og jeg har nu forsøgt at rette så mine ID bliver sat med .setAttribute. :D

sidst men ikke mindst... hvad er det med at IE ikke kan sætte name på? det er da bare typisk microsoft >_< DOM, super smart! hvis ellers de bare kunne blive enige om hvordan det skal virke. lol

Jeg har forsøgt mig med den opstilling til IE, men så går det helt i fisk for mig =(
Kan jeg nøjes med at ændre mine variabler + slette .setAtrribute til name, eller skal der mere til? (tror jeg der skal, for det virker ikke. heh) og, vil den opstilling også virke i Firefox, safari ect?

Fluse
Avatar billede w13 Novice
11. marts 2008 - 08:05 #4
I min linje kunne jeg godt bare sige:

document.getElementsByTagName("form")[0]...

så ville jeg få fat i det element, som indeholder "placement". Men det bliver jo noget mere dynamisk, hvis jeg bruger:

document.getElementById("placement").parentNode...

Så finder den jo selv det element, som indeholder "placement", ved at gå ud til "parentNode" (forældrenoden). =)
Avatar billede olebole Juniormester
11. marts 2008 - 13:51 #5
Det er nu ikke fordi, det er typisk MS, at IE kløjs i name attributten. Jeg kunne vise dig ting med invalid DOM i FF, der ville efterlade dine fortænder i bordkanten  ;o)
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

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