29. december 2007 - 20:05Der 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.
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>
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.
ø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).
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>
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.
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>
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.
<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>
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 :-)
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?
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)
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).
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.