Avatar billede melieha Nybegynder
15. april 2009 - 15:44 Der er 11 kommentarer og
2 løsninger

Indsætte i ovenliggende div. (Ex. innerhtml)

Hejsa

Jeg har en side i denne stil:
<div><a ...>indsæt nyt felt</a>BLa bla <input />bla, </div>

Ved tryk på "Indsæt nyt felt" skal der indsættes endnu en input (Og lidt andet, men det skulle jeg nok kunne styre), det jeg tilsyneladende IKKE magter er at få scriptet til at indsætte det i den div som knappen ligger i.

Jeg har forsøgt mig med this.parent og lignende, men uden noget held.

Det er ikke en løsning at give min DIV et id, da der vil blive oprettet mange mange, så det skal håndteres ved at det er elementet "over" som der skal indsættes i.

Min umidbare plan var at bruge "innerhtml".
Avatar billede majbom Novice
15. april 2009 - 16:58 #1
<script type="text/javascript">
            function addInput(oElm){
                  var oNewInput = document.createElement('input');
                  oNewInput.setAttribute('type', 'text');
                  oElm.parentNode.appendChild(oNewInput);
              }
        </script>

...

<div><a href="#" onclick="addInput(this);">test</a><input type="text"></div>
Avatar billede majbom Novice
15. april 2009 - 16:59 #2
og husk nu at glem alt om innerHTML :)
Avatar billede olebole Juniormester
16. april 2009 - 01:47 #3
<ole>

splazz >> Et eksempel lige efter bogen! IE har dog et problem med name attributter, som den ikke kan sætte med setAttribute  :o|
    http://msdn.microsoft.com/en-us/library/ms536389(VS.85).aspx

Bemærk, hvad der står under Remarks:
Attributes can be included with the sTag as long as the entire string is valid HTML. To include the NAME attribute at run time on objects created with the createElement method, use the sTag .

Use the sTag to include attributes when form elements are created that will be reset using the reset method or a BUTTON with a TYPE attribute value of reset.


<script type="text/javascript">
Hvis du skal bruge name attributter (hvis det er en form, der skal sendes), kan du gøre noget i stil med:

var sUa = navigator.userAgent.toLowerCase(),
ie = (sUa.indexOf("msie")>-1&&sUa.indexOf("opera")<0);

function addInput(oElm, sName){
    var oNewInput = document.createElement( ie ? "<input name='"+sName+"'>" : "input" );
    oNewInput.setAttribute('name', sName);
    oNewInput.setAttribute('type', 'text');
    oElm.parentNode.appendChild(oNewInput); // Sidst i divet
    // oElm.parentNode.insertBefore(oNewInput, oElm.parentNode.firstChild); // Først i divet
    // oElm.parentNode.insertBefore(oNewInput, oElm); // Før linket
    // oElm.parentNode.insertBefore(oNewInput, oElm.nextSibling); // Efter linket
}
</script>

<div><a href="#" onclick="addInput(this, 'myNewInput');">test</a><input type="text"></div>

/mvh
</bole>
Avatar billede olebole Juniormester
16. april 2009 - 01:49 #4
- hov ... scriptagget begynder et afsnit for tidigt  =)
Avatar billede majbom Novice
16. april 2009 - 08:31 #5
-> ole - okay så :)

så hvis ie er sand opretter den inputtet inkl. navn og hvis ikke opretter den jo kun inputtet uden nogle attributer.

og hvis man anvender ie, så bliver denne linje bare "sprunget over":

    oNewInput.setAttribute('name', sName);

?
Avatar billede melieha Nybegynder
16. april 2009 - 08:45 #6
Superperfekt, første eksempel virkede som ønsket, så hvis du kaster et svar afsted :) Ole ligeså, så må jeg lige kaste lidt ekstra points rundt for den ekstra uddybning.

Havde godt læst lidt omkring at innerhtml var noget skidt (På oleboles side vist endda ;)), men det var lige hvad jeg kunne finde frem til uden videre, og da det blot er til internt brug er det ikke super vigtigt at det overholder alle mulige regler, så længe at det virker :P Men bestemt rart at det bliver lavet på den "rigtige" måde nu :)

Er der noget galt i at oprette på "IE" måden? document.createElement("<input name='"+sName+"'>");
Altså at skrive det hele i en lang smørre, i stedet for at angive det hele bagefter?
Avatar billede majbom Novice
16. april 2009 - 08:55 #7
svar kommer her, så må ole lige besvare dit sidste spørgsmål, for det ved jeg ikke. :)
Avatar billede olebole Juniormester
16. april 2009 - 09:25 #8
splazz >> Nej, linjen bliver sprunget over, men IE har på den anden side ikke noget imod den. Det 'sjove' er, at IE øjensynligt godt kan sætte attributten med setAttribute - den er der f.eks, når man spørger med getAttribute - men den virker ikke, når dokumentet efter en submit rammer serveren. Her eksisterer feltet ikke  :o|

melieha >> IE's måde at oprette elementer på er højst ustandardiseret, men man er nødt til det, indtil vi får XForms - hvilket nok vil ske sammen med indførelsen af XHTML 2.0.
DOM Level 2 og forms spiller i forvejen rigtig skidt sammen
Avatar billede majbom Novice
16. april 2009 - 10:00 #9
-> ole - okay, skrammel!
Avatar billede olebole Juniormester
16. april 2009 - 10:14 #10
Kampskrammel ...!
Avatar billede melieha Nybegynder
20. april 2009 - 08:44 #11
Hej begge to, og tusinde tak for hjælpen :) Det spiller bare super godt!

Jeg kunne ikke finde noget sted til at tildele spørgsmålet flere points, så de blev delt lige imellem jer.
Avatar billede majbom Novice
20. april 2009 - 08:53 #12
tak for point, det er rigeligt med de 30 for mit vedkommende - det er jo ikke det det handler om :)
Avatar billede olebole Juniormester
20. april 2009 - 09:20 #13
Tak for points - vi er alle tilfredse  ;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
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