Avatar billede BTEngineer Novice
01. juni 2012 - 13:59 Der er 18 kommentarer og
1 løsning

Automatisk indsættelse af tekst i flere felter

Hej Eksperter!

Jeg sidder med et script, hvor man skal udfylde en række felter (21 stykker). Alt afhængig af hvad man klikker på, skal der indsættes noget forskelligt.

Jeg har lavet felterne således i PHP:

<?php
for($i = 0; $i <= 20; $i++) {
echo"<input type='text' name='subjects[]' size='32' value='".$subjects[$i]."'><br />";
}
?>

Dvs. der bliver lavet 21 felter.

Lad os nu sige at der er 3 knapper.

KNAP 1 - KNAP 2 - KNAP 3

Er der mulighed for at man kan lave således at hvis man trykker på KNAP 1, så indsætter den nogle bestemte værdier (tekst) i disse felter, og nogle andre ved KNAP 2 og KNAP 3. Jeg kunne forestille mig det i javascript, men det er ikke min stærke side desværre.

Er der nogen der kan hjælpe mig? :-)
Avatar billede olsensweb.dk Ekspert
01. juni 2012 - 14:33 #1
du kan lave et multidim array, med alle tekster

noget ala
ar [knap1] [0] = "tekst1";
..
ar [knap1] [20] = "tekst2";

ar [knap2] [0] = "tekst1";
..
ar [knap2] [20] = "tekst2";

ar [knap3] [0] = "tekst1";
..
ar [knap3] [20] = "tekst2";

alternativt kan du hente teksterne on the fly vi AJAX
Avatar billede BTEngineer Novice
01. juni 2012 - 14:53 #2
Idéen er at det bare skal indsættes i felterne som tekst, ikke at der skal ske en forespørgelse. Kan maksimalt lidt javascript. ;-)
Avatar billede olebole Juniormester
01. juni 2012 - 15:04 #3
<ole>

@dounie: Det er præcist det, ronols prøver at hjælpe dig med i #1  =)

Teksterne skal jo komme et sted fra, så enten må du opbevare dem i et array, eller også må du hente dem hen ad vejen. Er der tale om mange tekster/muligheder, er det ikke særlig hensigtsmæssigt at have dem alle liggende i dokumentet. Så er det bedre at foretage forespørgsler med Ajax, når der bliver brug for dem

/mvh
</bole>
Avatar billede BTEngineer Novice
01. juni 2012 - 15:15 #4
Hej.

Ja, forstod det som noget javascript der skulle bygges videre på, hvilket jeg ikke kan.

Men problemet for mig er så, hvordan jeg via. et link <a href="et eller andet">KNAP 1</a> får det array med teksterne til at blive indsat i alle 21 felter ved et klik (allesammen noget forskelligt.).
Avatar billede olebole Juniormester
01. juni 2012 - 15:23 #5
Det er også problemet for os, for vi ved intet om, hvad der skal ske - hvornår - eller hvordan. Du må nok fortælle noget mere  =)
Avatar billede BTEngineer Novice
01. juni 2012 - 15:31 #6
Jeg har en form, mit PHP laver 21 almindeligt input-felter.

Jeg skal bruge 3 forskellige link:

<a href="">KNAP 1</a>
<a href="">KNAP 2</a>
<a href="">KNAP 3</a>

Hvert link indeholder et array, med en bestemt tekst til hvert felt.

Så trykker man f.eks. på KNAP 2, og de 21 forskellige tekster bliver sat ind i hvert input-felt.
Trykker man så på KNAP 3, så erstatter den de nuværende 21 forskellige tekster med 21 andre.

Det er det eneste der skal ske. Det skal jo være dynamisk, dvs. den skal ikke opdatere siden ved at man trykker på et af de 3 links.
Avatar billede olebole Juniormester
01. juni 2012 - 16:14 #7
Hvordan ser dine felter ud? Vi skal have fundet 21 felter, og skal vi undgå en kæmpe kode, må vi finde en let måde at genkende dem på. Det kan f.eks. være udfra name eller id attributter, eller det kan være udfra placering i koden
Avatar billede olebole Juniormester
01. juni 2012 - 16:31 #8
Du kunne gøre noget i stil med:

<script type="text/javascript">
var aTexts = [
    ["foo", "Tekst 1 (foo)", "Tekst 2 (foo)", "Tekst 3 (foo)"],
    ["bar", "Tekst 1 (bar)", "Tekst 2 (bar)", "Tekst 3 (bar)"],
    ["baz", "Tekst 1 (baz)", "Tekst 2 (baz)", "Tekst 3 (baz)"]
];

function setFields(elm) {
    var nInx = elm.getAttribute("id").split("_")[1];
    for (var i=0,j=aTexts.length; i<j; i++) {
        document.getElementsByName(aTexts[i][0])[0].value = aTexts[i][nInx];
    }
}
</script>

<p>
    <button id="btn_1" onclick="setFields(this)" type="button">Knap 1</button>
    <button id="btn_2" onclick="setFields(this)" type="button">Knap 2</button>
    <button id="btn_3" onclick="setFields(this)" type="button">Knap 3</button>
</p>

<p>
    <input name="foo" type="text">
    <input name="bar" type="text">
    <input name="baz" type="text">
</p>
Avatar billede BTEngineer Novice
14. juni 2012 - 12:33 #9
Hej Olebole!

Tak for dit svar.

Jeg beklager det meget sene svar, men jeg har åbenbart ikke modtaget en mail om at der var kommet et nyt (eller to nye) besvarelser på indlægget.

Jeg har afprøvet din kode, og det er næsten sådan det skal fungerer! Men problemet er at min 21 felter hedder subjects[] allesammen. Jeg har nu givet dem et unikt ID allesammen: btn_0 - btn_20, dvs. vi har 21 unikke ID'er på de felter jeg gerne vil have fyldt ud.

Det skal være sådan at der som nu er tre knapper. Trykker man på knappe 1, så indsætter den i alle de 21 felter bestemte værdier. Knap 2 er det nogle andre osv. Det skal som det er nu, selv kunne bestemmes i javascriptet.

Som det er nu, indsætter den også fra de andre tekstværdier i javascriptet, når man f.eks. trykker på knappe 1.

Jeg ved ikke lige hvordan den skal grejes.
Avatar billede olebole Juniormester
14. juni 2012 - 14:13 #10
"Som det er nu, indsætter den også fra de andre tekstværdier i javascriptet, når man f.eks. trykker på knappe 1." >> Det forstår jeg ikke. Scriptet i #8 gør ikke
Avatar billede BTEngineer Novice
14. juni 2012 - 14:26 #11
Hvis man trykker på <button id="btn_1" onclick="setFields(this)" type="button">Knap 1</button>, indsætter den ["foo", "Tekst 1 (foo)", "Tekst 1 (bar)", "Tekst 1 (baz)"], i vores tre felter <input name="foo" type="text">, <input name="bar" type="text"> og <input name="baz" type="text">. Men de har jo hvert et forskelligt navn, og det jeg skal bruge er, at man trykker på fx knap 1, og så indsætter den et array med 21 tekster/værdier i 21 felter, der hvert har det samme navn, men et forskelligt ID.

Ved ikke om det gjorde det mere forståeligt :-)
Avatar billede olebole Juniormester
14. juni 2012 - 14:40 #12
Prøv at lægge et link til et eksempel
Avatar billede BTEngineer Novice
14. juni 2012 - 14:50 #13
Avatar billede olebole Juniormester
15. juni 2012 - 14:17 #14
- og hvilke felter, skal udfyldes?
Avatar billede BTEngineer Novice
15. juni 2012 - 17:04 #15
De 21 felter der skal udfyldes er dem under fanen "Fag".
Avatar billede olsensweb.dk Ekspert
17. juni 2012 - 13:37 #16
@dounie hvis du ikke er kommet vidre kan du kigge på disse 2
http://experten.olsensweb.dk/963843/index_v0.htm // der er lige mange tekster i alle array
http://experten.olsensweb.dk/963843/index_v1.htm // der er ikke lige mange tekster i alle array

iøvrigt genbruger du id="headline" og id="btn_1" til id="btn_3", dem må man ikke
<div id="headline">Fag</div>
<div id="headline">Vægt</div>
..

løsning lav det om til en class
<div class="headline">Fag</div>
husk at rette i css også

men jeg ville nu stadig overveje en ajax løsning, for som olebole skriver i #3
Er der tale om mange tekster/muligheder, er det ikke særlig hensigtsmæssigt at have dem alle liggende i dokumentet. Så er det bedre at foretage forespørgsler med Ajax, når der bliver brug for dem
Avatar billede BTEngineer Novice
23. marts 2013 - 01:01 #17
Er der en guttermand der vil smide et svar til dette indlæg, således at jeg kan afsætte mine 150 points til dette spørgsmål? :-)
Avatar billede olebole Juniormester
23. marts 2013 - 01:08 #18
Jeg kan høre en kalde på ronols  =)
Avatar billede olsensweb.dk Ekspert
28. marts 2013 - 17:20 #19
svar
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