webForumDet fria alternativet

Text från en select till en textarea

15 svar · 522 visningar · startad av drew

drewMedlem sedan mars 2007845 inlägg
#1

Jag har

<select id="citat_select" name="citat_select" size="25" style="max-width: 380px;">
<option value="1">Citat 1</option>
<option value="2">Citat 2</option>
<option value="3">Citat 3</option>
</select>
<textarea id="citat_edit" name="citat_edit" rows="5" cols="80"></textarea>

Jag vill att när man väljer (klickar på) ett citat i select-listan så ska citatet skrivas in i textarean. Jag vill helst inte lägga in någon javascript förutom i <select> eller <option> taggarna.

Jag har experimenterat och bläddrat på nätet större delen av natten utan att komma ett dugg närmare en lösning.

Någon som vet hur detta ska lösas eller har en url som kan vara till nytta?

/D

stattinMedlem sedan jan. 2005713 inlägg
#2

Det skulle ju bli lite snyggare och enklare om man la det på sidan om.

<select id="citat_select" onchange = "document.getElementById('citat_edit').value = document.getElementById(this.id).options[document.getElementById(this.id).selectedIndex].text" name="citat_select" size="5" style="max-width: 380px;">
<option value="1">Citat 1</option>
<option value="2">Citat 2</option>
<option value="3">Citat 3</option>
</select>

<textarea id="citat_edit" name="citat_edit" rows="25" cols="80"></textarea>
drewMedlem sedan mars 2007845 inlägg
#3

Aha. man måste getElementById(this.id) också. Trodde det räckte med att hämta id på målet.

Det funkar, tack.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#4

document.getElementById(this.id) är en helt onödig konstruktion eftersom den bara pekar tillbaka på this och dessutom misslyckas om man skulle råka använda den på ett objekt utan id-egenskap.
Dessutom, om du har flera par av rutor, typ citat_select/citat_edit, citat2_select/citat2_edit osv, eller vad det kan vara, så kan du hämta id't för selecten och modifera det genom att ersätta _select med _edit. På det viset kan du använda exakt samma kod för alla select. (Den koden funkar dock jättebra även för en ensam select)

<select id="citat_select" onchange = "document.getElementById(this.id.replace(/_select$/i, '_edit')).value = this.options[this.selectedIndex].text" name="citat_select" size="5" style="max-width: 380px;">
<option value="1">Citat 1</option>
<option value="2">Citat 2</option>
<option value="3">Citat 3</option>
</select>

<textarea id="citat_edit" name="citat_edit" rows="25" cols="80"></textarea>
stattinMedlem sedan jan. 2005713 inlägg
#5

jajaja :birp

nu är det helg!

drewMedlem sedan mars 2007845 inlägg
#6

Jag har testat båda och båda fungerar. Jag valde en mix av dom eftersom jag bara har en av varje.

En del citat innehåller LF (\n) eller <br /> som syns om man tittar i koden som skickas till webbläsaren. Men när man klickar på ett citat så är LF och <br /> utbytta mot ett mellanslag.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#7

drew skrev:

En del citat innehåller LF (\n) eller <br /> som syns om man tittar i koden som skickas till webbläsaren. Men när man klickar på ett citat så är LF och <br /> utbytta mot ett mellanslag.

Det enkla, men ganska kassa sättet att lösa detta på är att byta ut text mot innerHTML i koden, så kommer de citat som har <br /> utskrivet att hanteras rätt. Dock fungerar det itne i IE, och dessutom är det rejält fult.
Ett bättre sätt är att antingen ersätta radbrytningar i citatet med ett annat tecken, kanske semikolon, eller att använda value-egenskapen istället, och gärna bara skriva ut ett utdrag av citatet, t ex bara de första x tecknen, i den synliga texten.

drewMedlem sedan mars 2007845 inlägg
#8

value-egenskapen?

Det går inte att bara skriva ut ett utdrag av citatet i text-fältet. Där ska citatet ändras när man råkat kopiera fel eller så. option's value är citatets id i databasen.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#9

Ungefär så här:

<select id="citat_select" onchange = "document.getElementById(this.id.replace(/_select$/i, '_edit')).value = this.options[this.selectedIndex].value" name="citat_select" size="5" style="max-width: 380px;">
<option value="Hela citat 1">Citat 1 (utdrag)</option>
<option value="Hela citat 2">Citat 2 (utdrag)</option>
<option value="Hela citat 3">Citat 3 (utdrag)</option>
</select>

<textarea id="citat_edit" name="citat_edit" rows="25" cols="80"></textarea>

Alltså att du använder value för varje list-föremål för att lagra citatet i den form det ska kopieras till textrutan.

drewMedlem sedan mars 2007845 inlägg
#10

Ok. Då måste jag lagra citatets id någon annanstans.

Testade innerHTML på w3schools och där funkade det med IE. Kravet är att det ska fungera med FF och Opera så att det inte fungerar med IE gör inte så mycket. Att lagra <br /> i databasen istället för att lägga till det när sidan ska visas är enligt mig en förbättring.

Jag kör med innerHTML.

Tack.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#11

drew skrev:

Ok. Då måste jag lagra citatets id någon annanstans.

Måste du verkligen det? Eftersom citatet kopieras till textrutan undrar jag vad tusan du ska med ID't till. Men även det finns det en lösning till. Du kan lagra både id'et och citatet i value-fältet, typ value="1; Citatet följer här" och sedan klippa ut den del du vill ha (Citatet på klienten samt id't på servern)

drew skrev:

Testade innerHTML på w3schools och där funkade det med IE.

innerHTML som sådant funkar i IE, däremot kopieras inte radbrytningarna i IE ens om du använder innerHTML. (Men däremot i F och O)

drewMedlem sedan mars 2007845 inlägg
#12

Textrutan är till för att kunna editera citatet. Jag behöver id't för att kunna spara på rätt rad i databasen efter att citatet ändrats.

Att använda något tecken som avgränsare fungerar ju förstås.

stattinMedlem sedan jan. 2005713 inlägg
#13

kan du inte lagra databasens id som ett id då?


<select id="citat_select" onchange = "document.getElementById(this.id.replace(/_select$/i, '_edit')).value = this.options[this.selectedIndex].value; alert(this.options[this.selectedIndex].id)" name="citat_select" size="5" style="max-width: 380px;">
<option id="1" value="Hela citat 1">Citat 1 (utdrag)</option>
<option id="2" value="Hela citat 2">Citat 2 (utdrag)</option>
<option id="3" value="Hela citat 3">Citat 3 (utdrag)</option>
</select>

<textarea id="citat_edit" name="citat_edit" rows="25" cols="80"></textarea>

krångligare kanske

drewMedlem sedan mars 2007845 inlägg
#14

Känns aningen omständigt att få ut rätt id till php-skriptet som ska spara ner det i databasen.

En möjlighet vore ju att stoppa id't i en hidden och ta den därifrån.

Men det är akademiskt. Den fungerar som avsett nu och jag känner mig nöjd med den.

Är det FF du vill förkorta FX? :) (kunde inte låta bli)

stattinMedlem sedan jan. 2005713 inlägg
#15

jag tänkte bara eftersom du sa:

drew skrev:

måste jag lagra citatets id någon annanstans.

edit/ Jag fick för mig att du hämtar uppgifterna med något serverspråk från början, kanske du gör också.

drew skrev:

Är det FF du vill förkorta FX? :) (kunde inte låta bli)

Tja.. jag kunde väl inte låta bli §e
Ser så många på wf som skriver FF. Fast man skrev ju likadant själv innan man visste om det.

drewMedlem sedan mars 2007845 inlägg
#16

Ja, citaten hämtas från databasen med php.

Sen när det klickas på skicka kollar jag om det står någon i textfältet och om något i selecten är valt så ersätts det som står vid det id't i databasen med det i textfältet.

Därför måste jag få med id't tillbaka till php-skriptet.

Jag vet att dom som gör FF vill att det ska förkortas FX. Men FF är lättare att skriva så dom får anpassa sig. :D

141 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)