Avatar billede jgivoni Nybegynder
19. oktober 2007 - 10:28 Der er 9 kommentarer og
1 løsning

Dynamisk indsættelse af input elementer i form (IE)

Hej eksperter!

Hvordan kan jeg ved hjælp af javascript tilføje input elementer til min html-form så disse bliver overført ved submit - også når brugeren benytter Internet Explorer?

Jeg har prøvet noget i stil med følgende (uddrag):

    <script>
        function init(form)
        {
            var input = document.createElement("input");
           
            input.name = "c";
            input.value = "d";
            input.type = "text";
           
            form.appendChild(input);
        }
    </script>

    <form action="test.html" onfocus="init(this)" method="get">
        <input name="a" value="b" type="text"/>
        <input type="submit" />
    </form>

Det virker fint i Firefox men Internet Explorer ser ikke ud til at reagere på indsættelsen af nye input-elementer.

Jeg har også prøvet at tilføje elementet til form.elements array'et, men uden effekt. Har ligeså forsøgt med setAttribute metoden.

Er der nogen der kender en virksom metode?
Avatar billede jgivoni Nybegynder
19. oktober 2007 - 11:25 #1
Nej ved I nu hvad...?

Det er slet ikke indsæt-input koden der er noget galt med, det er bare det at onfocus tilsyneladende aldrig bliver kaldt i IE...

Jeg undskylder ulejligheden.
Avatar billede nielle Nybegynder
19. oktober 2007 - 12:09 #2
Nej, det er jo ikke formen som får fokus, men derimod de enkelte input felter.
Avatar billede jgivoni Nybegynder
19. oktober 2007 - 12:51 #3
Ja, jeg blev bare kørt af sporet fordi det virkede i Firefox :-)
Avatar billede nielle Nybegynder
19. oktober 2007 - 14:31 #4
Husk at lukke spørgsmålet :^)
Avatar billede jgivoni Nybegynder
19. oktober 2007 - 14:47 #5
Ok.
Avatar billede soerenlyn Nybegynder
20. oktober 2007 - 13:01 #6
Dog mener jeg det er mere "korrekt" at du sætter dine attributter med input.setAttribute("name","c") og input.setAttribute("type","text"), frem for bare at skrive input.name ...

Nogen der kan give mig ret i det?
Avatar billede jgivoni Nybegynder
20. oktober 2007 - 15:56 #7
Jeg har prøvet både med input.name = "c" og input.setAttribute("name", "c") og begge dele gjorde hvad der forventedes i FF2 og IE7, men det kunne da være rart at vide hvad forskel det evt. kunne gøre.

Jeg vil give soerenlyn ret i at input.setAttribute bør være det mest korrekte når der arbejdes med DOM elementer og derfor er mere robust i længden. Jeg bemærkede iøvrigt den forskel at når jeg brugte input.name = "c" fremgik denne attribut ikke hvis jeg udprintede form.innerHTML (i FF2), hvorimod den gjorde hvis jeg brugte setAttribute.

Men altså ingen forskel i resultatet af submit.
Avatar billede roenving Novice
21. oktober 2007 - 06:21 #8
IE har nogle mærkværdigheder omkring input-elementer og DOM-oprettelse ...

-- såvidt jeg er stødt ind i er det nødvendigt at:

document.createElement("<input name='c'>");

Hvis det skal virke i denne mindre udbredte browser ...
Avatar billede soerenlyn Nybegynder
21. oktober 2007 - 12:29 #9
Nu ved jeg ikke hvad du mener med mindre udbredte browsere, men jeg plejer at oprette elementet og derefter putte name på med setAttribute, og det virker også i fx safari, opera, seamonkey..
Avatar billede roenving Novice
01. november 2007 - 16:31 #10
Lige det udtryk var vist nok lettere sarkastisk ...

-- og såvidt jeg er orienteret, så virker det i alle nyere browsere, der har en ordentlig DOM implementeret !-)

-- altså lige bortset fra M$-produktet ...
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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