Avatar billede thomas-k Nybegynder
29. december 2007 - 20:05 Der er 20 kommentarer og
3 løsninger

Dynamiske tekst felter

Jeg har 10 felter i en form. fx:

<form action="andenside.asp" method="post">
<input size="20" type="text" name="felt1"><br>
<input size="20" type="text" name="felt1"><br>
<input size="20" type="text" name="felt1"><br>
osv. op til felt10.

Nu vil jeg gerne have disse skjult, så man kun kan se felt1. Ud for felt1 skal der så være et lille "plus" billede, så når man trykker på dette, skal den også vise felt2 så det kan udfyldes. Ud for felt 2 skal der igen være et lille "plus" billede, så når man trykker på dette, skal felt 3 også vises så dette kan udfyldes, osv. op til felt10, hvor der så ikke skal være et "plus" billede da grænsen for felter er opnået.

Derved kan jeg gemme felter på siden, hvis de alligevel ikke skal anvendes. Hvorledes kunne man lave dette? Jeg er helt på bar bund, så håber der er en som kan give et eksempel.
Avatar billede w13 Novice
29. december 2007 - 20:16 #1
F.eks. nogenlunde sådan her:
----------------------------------
<script type="text/javascript">
var FieldNo=1;
function InsertTextField(o){
  FieldNo++;
  var newElement=o.parentNode.cloneNode(true);
  document.getElementById("textfields").appendChild(newElement);
}
</script>

<form action="andenside.asp" method="post">
  <p id="textfields">
    <p><input type="text" name="felt1" size="20"><span title="Tilføj tekstfelt" style="cursor:pointer" onclick="InsertTextField(this)">+</span></p>
  </p>
  <input type="submit" value="Udfør">
</form>
Avatar billede w13 Novice
29. december 2007 - 20:16 #2
Dog meget utestet!
Avatar billede thomas-k Nybegynder
29. december 2007 - 20:29 #3
Jaaa, jooo. Derhen af. Dog kan man få mere end 10 felter på, man kan blive ved med at klikke på samme "plus" tegn, i stedet for at den bliver inaktiv eller forsvinder, og kan jeg kalde feltet på næste side med navnene felt1, felt2, felt3 osv.?

Håber du kan hjælpe mig med at udvide den til ovenstående. Så ville det være top-dollar.
Avatar billede thomas-k Nybegynder
29. december 2007 - 20:34 #4
Nej, testede lige med at kalde på næste side, men der smider den alle sammen ind i felt1.
Avatar billede thomas-k Nybegynder
29. december 2007 - 20:38 #5
øhh, vent lidt. For sidst nævnte med at den smider det ind i samme felt gør egenligt ikke noget. Så den er fjong. Nu mangler jeg bare at den begrænser sig til 10, samt at den evt. kan huske felterne hvis man klikker på tilbage knappen (her går den tilbage til at være et felt).
Avatar billede roenving Novice
30. december 2007 - 12:15 #6
Du skal bare spørge om FieldNo er større end 10 før du opretter endnu et felt ...

-- tilbage-tingen tror jeg ikke kan løses på nogen måder (medmindre vi går over i cookies !-)
Avatar billede w13 Novice
30. december 2007 - 12:55 #7
Som Roenving siger, så vil det blive lidt problematisk at sætte den til at huske det.

Hvad angår at den smider det i samme felt på næste side: ups. =) Fik lige slettet den del. I nedenstående kodeeksempel har jeg udkommenteret en linje, du kan bruge til at give hvert felt et nyt navn.
----------------------------------------
<script type="text/javascript">
var FieldNo=1;
function InsertTextField(o){
  if(FieldNo<10){
    FieldNo++;
    var newElement=o.parentNode.cloneNode(true);
    //newElement.setAttribute("name","felt"+FieldNo);
    document.getElementById("textfields").appendChild(newElement);
    o.style.display="none";
  }
}
</script>

<form action="andenside.asp" method="post">
  <p id="textfields">
    <p><input type="text" name="felt1" size="20"><span title="Tilføj tekstfelt" style="cursor:pointer" onclick="InsertTextField(this)">+</span></p>
  </p>
  <input type="submit" value="Udfør">
</form>
Avatar billede thomas-k Nybegynder
30. december 2007 - 15:53 #8
Jamen det er jo super. Vedr. tilbage knappen dropper jeg bare. Også dejligt at du inkluderede eksempel på kald af felter. Jeg har dog en sidste ting. Når jeg klikker på plus tegnet, er den et felt bagefter. Dvs. når jeg klikker ved felt 1, forbliver plus tegnet ved felt 1. Når jeg klikker igen for at få felt 3, hopper plus tegnet ned til felt 2. Her ville jeg gerne have at den følger med det nye felt. Samtidig ville det være kanon hvis man kunne få en advarsel når grænsen for felter er nået, så brugeren får besked om dette.
Avatar billede w13 Novice
30. december 2007 - 16:56 #9
Således:
--------------------------------------------------
<script type="text/javascript">
var FieldNo=1;
function InsertTextField(o){
  if(FieldNo<10){
    FieldNo++;
    var newElement=o.parentNode.cloneNode(true);
    o.parentNode.parentNode.insertBefore(newElement,o.parentNode.nextSibling);
  }
  o.parentNode.removeChild(o);
  if(FieldNo==10)alert("Du kan ikke tilføje flere felter!");
}
</script>

<form action="andenside.asp" method="post">
  <p><input type="text" name="felt1" size="20"> <span title="Tilføj tekstfelt" style="cursor:pointer" onclick="InsertTextField(this)">+</span></p>
  <input type="submit" value="Udfør"></form>
<span onclick="alert(document.getElementsByTagName('body')[0].innerHTML)">innerHTML</span>
Avatar billede thomas-k Nybegynder
30. december 2007 - 17:24 #10
Ahh men det jo smukt. Tusind tak for hjælpen. Det spiller maks. Sorry hvis jeg var lidt krævende ;-)
Avatar billede w13 Novice
30. december 2007 - 17:50 #11
Jeg takker for point. =)
Avatar billede thomas-k Nybegynder
30. december 2007 - 20:30 #12
Jamen, det ar så lidt. Jeg har lige testet det i noget tid nu, og fandt ud af hvis jeg udfyldr noget i felt1 og klikker på plus, så kopieres tkst fra felt 1 ned i felt2. Ville man på en eller anden vis kunne slette dette, så det nye felt er blankt selvom noget er indskrvet i det forrige.
Avatar billede w13 Novice
30. december 2007 - 20:35 #13
Sagtens. Du retter bare:

<script type="text/javascript">
var FieldNo=1;
function InsertTextField(o){
  if(FieldNo<10){
    FieldNo++;
    var newElement=o.parentNode.cloneNode(true);
    o.parentNode.parentNode.insertBefore(newElement,o.parentNode.nextSibling);
  }
  o.parentNode.removeChild(o);
  if(FieldNo==10)alert("Du kan ikke tilføje flere felter!");
}
</script>

Til:

<script type="text/javascript">
var FieldNo=1;
function InsertTextField(o){
  if(FieldNo<10){
    FieldNo++;
    var newElement=o.parentNode.cloneNode(true);
    newElement.removeAttribute("value");
    o.parentNode.parentNode.insertBefore(newElement,o.parentNode.nextSibling);
  }
  o.parentNode.removeChild(o);
  if(FieldNo==10)alert("Du kan ikke tilføje flere felter!");
}
</script>
Avatar billede thomas-k Nybegynder
30. december 2007 - 20:44 #14
Du er en guttermand. Godt nytår herfra :-)
Avatar billede thomas-k Nybegynder
30. december 2007 - 22:03 #15
Hov, det virker ikke helt. Den husker stadig info fra forrige felt?
Avatar billede w13 Novice
30. december 2007 - 23:07 #16
Ok, så prøv at rette:

newElement.removeAttribute("value");

til:

newElement.setAttribute("value","");
Avatar billede w13 Novice
30. december 2007 - 23:07 #17
Ahr, det er mig, der for dum. Det skal være:

newElement.firstChild.removeAttribute("value");

og hvis det stadig ikke vil, så:

newElement.firstChild.setAttribute("value","");
Avatar billede thomas-k Nybegynder
30. december 2007 - 23:16 #18
Ahh, cool. Det virkede. Kom også til at tænkte på at det egenligt er smart nok at den smider det hele ind i et felt i sidste ende, så undgår jeg emlig tomme felter i DB. En stor skål til dig :-)
Avatar billede thomas-k Nybegynder
18. april 2008 - 14:15 #19
Nå, jeg ville lige prøve at udvide ovenstående, så man kan uploade en fil i formen. Dertil var jeg jo nød til at tilføje ENCTYPE="multipart/form-data samt tilføje Upload.form i stedet for Request.form. Men her opstår der så et problem med Javascriptet, da kun første værdi i felterne medtages. Dvs. laver jeg to felter med + tegnet, og skriver 1 i det føste og 2 i det næste jeg har tilføjet, ja så hiver Upload.form kun 1 tallet ud når jeg laver en Response.write Upload.form("felt1"). Men fjerner jeg ENCTYPE="multipart/form-data, og udskriver med Response.write Request.form("felt1"), så skriver den 1,2. Nogle der kan hjælpe med at få det til at virke med upload.form?
Avatar billede roenving Novice
18. april 2008 - 14:26 #20
Det lyder mere som et asp-problem ...
Avatar billede thomas-k Nybegynder
18. april 2008 - 14:31 #21
Ja, det virker mystisk. Håbede andre havde oplevet det samme...
Avatar billede olebole Juniormester
18. april 2008 - 16:50 #22
<ole>

Felter af typen 'file' kan du ikke indsætte dynamisk. Det vil sige, at det kan du såmænd godt, men de kan ikke uploade noget ... filen vil ikke være at finde på serveren.

Derudover fjernes en attribut generelt med:
    newElement.attributes.removeNamedItem("value");

- hvilket helt fjerner attributten fra feltet, men i dette tilfælde er det helt fint, hvis man sætter værdien til en tom streng  ;o)

/mvh
</bole>
Avatar billede thomas-k Nybegynder
18. april 2008 - 17:19 #23
Jamen, 'file' feltet bruger jeg ikke dynamisk. Det er nogle andre felter i formen der gør dette (almindelige text felter). De dynamiske felter virker også fint, medmindre jeg som nu har tilføjet et 'file' felt i formen. Derved skal jeg anvende ENCTYPE="multipart/form-data og Upload.form, men anvender jeg Upload.form, mister jeg funktionaliteten af de dynamiske tekstfelter (hvilket jeg ikke helt forstår).
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