Avatar billede q^bone Nybegynder
26. oktober 2005 - 12:47 Der er 37 kommentarer og
1 løsning

Overføre fra Popup til Textarea

Hej alle.
Ja jeg ved godt at dette spørgsmål er blevet stillet 100 gange, men jeg kan simpelthen ikke finde et som helt løser mit problem. im ikke andet kan jeg ikke få dem til at virke på min side :/

Jeg har en side med et tekstarea med name=\"besked\", samt en knap som åbner et poup vindue. (forum_reply.php)
Popup vinduet er bygget op af frames på følgende måde:
smiley.popup.php er "hovedsiden",
smiley.top.php siger sig selv, det er toppen og inderholder en overskrift.
smiley.list.php er listen med smiley kombinationer og smiley billeder, alt bliver hentet fra MySQL database.

Det jeg vil have er et link på mine smileys så nå man klikker på dem indsættes smiley koden (eks. ":D") ind i textarea på siden som åbnede popup vinduet.

Derudover vil jeg meget gerne have at smileyen bliver indsat lige efter cursor position.
eks:
<textarea name="besked">hej jeg hedder mads (cursor pos.)<her indsættes smiley> jeg er glad!</textarea>

Spørg endelig hvis der er noget i ikke er helt med på :)
Avatar billede olebole Juniormester
27. oktober 2005 - 01:46 #1
<ole>

<div onclick="top.opener.document.getElementsByName('besked')[0].value='Dette virker'">TEST</div>

- men i et textarea kan du kun indsætte tekst ... ikke grafik  :)

/mvh
</bole>
Avatar billede q^bone Nybegynder
27. oktober 2005 - 12:24 #2
Jeg ved godt man ikke kan sætte billeder ind i et textarea, det er derfor ejg skrev t jeg bare skal sætte text smileys ind ":)".
Men det du skrev der virkede ikke helt, den erstattede alt hvad der i forvejen var skrevet med en smiley.
Avatar billede q^bone Nybegynder
27. oktober 2005 - 14:59 #3
NU har jeg fundet dette script:

<script>

function addText (texttoadd) {
opener.document.dinform.dittextarea.value+=texttoadd;
self.close();
}
</script>

<a href=\"java script:addText(\'test1\');\">test1</a>
<a href=\"java script:addText(\'test2\');\">test2</a>

Eneste problem er bare at den placerer smileyen i enden af det man har skrevet og ikke der hvor cusoren er placeret. Hvordan kan jeg ændre dette?
Avatar billede roenving Novice
27. oktober 2005 - 15:09 #4
Prøv skovenborgs insertText !-)

http://skovenborg.1go.dk/javascript/insertText.php

-- så skal funktionen lægges f.eks. i head-sektionen af popuppen og kaldes sådan:

<a href="#" onclick="insertText(opener.FORMNAVN.TEXAREANAVN,':)',true);setTimeout(self.close()',500);return false;"><img src="smileyGlad.gif" border="0"></a>
Avatar billede q^bone Nybegynder
27. oktober 2005 - 15:21 #5
Hmm det virker ikke, der sker faktisk slet ikke noget når jeg klikker på smileyerne.
Jeg har lagt denne funktion ind i header på den side i popup vinduet som lister smileys (husk at min popup side med smileys er bygget op i frames, hvs det har noget at sige)

<SCRIPT LANGUAGE="JavaScript">
var cursorpos;
/**
* Inserts text in a form-element
* @param frmElm A form-element, for instance a textarea
* @param text A string with the text which should be inserted
*/
function insertText(frmElm,text,fokus) {
    if (cursorpos && typeof cursorpos.start == "number") { // For Mozilla     
      frmElm.value = frmElm.value.substring(0,cursorpos.start)+text+frmElm.value.substring(cursorpos.end);
      if (fokus) {
        frmElm.setSelectionRange(cursorpos.end+text.length,cursorpos.end+text.length);
        frmElm.focus();       
      }
    }
    else if (cursorpos && cursorpos.range) { // For IE
      r = cursorpos.range;
      r.text = text;
      if (fokus) {frmElm.focus();}
    }
    else { // For everyone else
        frmElm.value += text;
        if (fokus) {frmElm.focus();}
    }
}

function storeCaretPos(frmElm) {
    if (typeof frmElm.selectionEnd == "number") {
        cursorpos = {start:frmElm.selectionStart,end:frmElm.selectionEnd}
    }
    else if (document.selection) {
        cursorpos = {range:document.selection.createRange().duplicate()}
    }
    else;
}
</script>

derefter har kalder jeg mine smileys med:
<a href=\"#\" onclick=\"insertText(opener.form2.besked,'".$smileys['smiley']."',true);setTimeout(self.close()',500);return false;\">".$smileys['smiley_path']."</a>

Navnet på min form med textarea er "form2" og mit tekstarea hedder "besked".
Avatar billede roenving Novice
27. oktober 2005 - 15:42 #6
Hrm, jeg var vist lidt for hurtig, for jeg overså i første omgang, at der er en cursorpos-ting, som skal aktiveres også, så hvis du kigger lidt nærmere på linket, kan du se, at dit textarea også skal indeholde nogle events, som aktiverer storeCaretPos-tingen !-)

-- læg derfor hele scriptet i hoveddokumentet og denne anelse anderledes i popuppen:

<a href=\"#\" onclick=\"opener.insertText(opener.form2.besked,'".$smileys['smiley']."',true);setTimeout(self.close()',500);return false;\">".$smileys['smiley_path']."</a>

-- og events skal så skrives ind i dit textarea:

<textarea name="besked" cols="30" rows="5" onfocus="storeCaretPos(this);" onmouseup="storeCaretPos(this)" onkeyup="storeCaretPos(this);" onblur="cursorpos = null">Her er noget tekst i et textarea</textarea>
Avatar billede q^bone Nybegynder
28. oktober 2005 - 00:20 #7
Hmm det virker ikke, når jeg klikker på de links så sker der slet ikke noget.
Avatar billede q^bone Nybegynder
28. oktober 2005 - 00:47 #8
Nu har jeg scriptet:
----------------------------
var cursorpos;
/**
* Inserts text in a form-element
* @param frmElm A form-element, for instance a textarea
* @param text A string with the text which should be inserted
*/
function insertText(frmElm,text,fokus) {
    if (cursorpos && typeof cursorpos.start == "number") { // For Mozilla   
      frmElm.value = frmElm.value.substring(0,cursorpos.start)+text+frmElm.value.substring(cursorpos.end);
      if (fokus) {
        frmElm.setSelectionRange(cursorpos.end+text.length,cursorpos.end+text.length);
        frmElm.focus();     
      }
    }
    else if (cursorpos && cursorpos.range) { // For IE
      r = cursorpos.range;
      r.text = text;
      if (fokus) {frmElm.focus();}
    }
    else { // For everyone else
        frmElm.value += text;
        if (fokus) {frmElm.focus();}
    }
}

function storeCaretPos(frmElm) {
    if (typeof frmElm.selectionEnd == "number") {
        cursorpos = {start:frmElm.selectionStart,end:frmElm.selectionEnd}
    }
    else if (document.selection) {
        cursorpos = {range:document.selection.createRange().duplicate()}
    }
    else;
}
----------------------------
I mit vindue som jeg åbner popupen fra, som jeg i øvrigt gør ved:

<input name="submit2" type="button" class="formstyle" onclick="java script:popUp('smiley.popup.php')" style="color:black; background-color:rgb(227,227,227);" value="Smileys" />

Funktionen popUp(); hedder som følgende:

function popUp(URL) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=160,height=200');");
}

Deruodover har jeg gjort som du sagde, jeg har sat:

<a href=\"#\" onclick=\"opener.insertText(opener.form2.besked,'".$smileys['smiley']."',true);setTimeout(self.close()',500);return false;\">".$smileys['smiley_path']."</a>

Ind på den side som lister mine smileys i popup vinduet.
Og jeg har ændret it textarea så det indeholder de egenskaber du skriver:

<textarea name="besked" rows="7" cols="82" onfocus="storeCaretPos(this);" onmouseup="storeCaretPos(this)" onkeyup="storeCaretPos(this);" onblur="cursorpos = null" class="formstyle"></textarea>

Jeg ved ikke helt, men er du sikker på at det ikke har noget at gøre med at min popup side er opbygget i frames?
Avatar billede roenving Novice
28. oktober 2005 - 09:48 #9
Ja !-)

-- så skal du bruge top.opener !o]
Avatar billede q^bone Nybegynder
01. november 2005 - 14:31 #10
Undskyld det sene svar.
Så vidt jeg kan forstå fra din kommentar så skal:

<a href=\"#\" onclick=\"opener.insertText(opener.form2.besked,'".$smileys['smiley']."',true);setTimeout(self.close()',500);return false;\">".$smileys['smiley_path']."</a>

ændres til:

<a href=\"#\" onclick=\"top.opener.insertText(top.opener.form2.besked,'".$smileys['smiley']."',true);setTimeout(self.close()',500);return false;\">".$smileys['smiley_path']."</a>

?? Hvis det er sandt så virker der altså ikke :(

Jeg har også prøvet med:

onclick=\"opener.insertText(top.opener.form2.besked,'".$smileys['smiley']."',true);

og

onclick=\"top.opener.insertText(opener.form2.besked,'".$smileys['smiley']."',true);

og stadig intet der virker.
Avatar billede roenving Novice
01. november 2005 - 14:56 #11
-- er der også frames i dit grund-dokument ?-)

-- prøv at linke til et eksempel på koden !-)
Avatar billede q^bone Nybegynder
01. november 2005 - 15:09 #12
Nej der er ikke frames, den er opbygget af en index side som skifter include alt efter hvilken side man går ind på.

Hvad er det du vil have at vide om koden? Vil du se siden hvor jeg skal bruge det?
Eller source?
Avatar billede roenving Novice
01. november 2005 - 15:13 #13
Ja !-)
Avatar billede q^bone Nybegynder
01. november 2005 - 15:29 #14
Ehm, ja til source? Det gætter jeg på.

Her er source til hovedsiden:
http://www.htxonline.dk/source.txt

Den er redigeret lidt men du burde kunne se hvordan det sidder sammen.

Her er source til smiley siden:
index: http://www.htxonline.dk/smiley.popup.txt
top: http://www.htxonline.dk/smiley.top.txt
main: http://www.htxonline.dk/smiley.list.txt
Avatar billede roenving Novice
01. november 2005 - 15:32 #15
Men hvis jeg skal kigge på kodens opførsel i browseren, ville det jo være rart, om den kode, jeg så, var den kode, som browseren så !-)

-- så hent den f.eks. fra Vis kilde ... eller læg et link!o]
Avatar billede q^bone Nybegynder
01. november 2005 - 16:12 #16
www.htxonline.dk
log ind med roenvig // test
og så er det under "Forum" og så ind i en eller anden tråd og klik på "Udvidet Svar"
Avatar billede roenving Novice
01. november 2005 - 16:21 #17
?-)

<textarea name="besked" rows="7" cols="82" onfocus="fokus = true;" onblur="fokus = false;" onclick="storeTextRange()" onkeyup="storeTextRange();" class="formstyle"></textarea>

storeCaretPos mangler da ?-)
Avatar billede roenving Novice
01. november 2005 - 16:22 #18
-- og der er da noget galt med popuppens størrelse ?o]
Avatar billede q^bone Nybegynder
01. november 2005 - 16:26 #19
Hehe jeg har redigeret i den forkerte fil..
Anyways, nu har jeg rettet det men det virker stadig ikke :(
Avatar billede q^bone Nybegynder
01. november 2005 - 16:30 #20
mht. popuppen så er det fordi jeg ikke har oprettet CSS style til den endnu :)
Avatar billede q^bone Nybegynder
01. november 2005 - 16:35 #21
Jeg har lige rettet nogle små fejl som jeg selv fandt, men stadig uden held.
Avatar billede roenving Novice
01. november 2005 - 16:36 #22
Hvad med at lave den i en ordentlig størrelse eller lave den resizable ?-)

Hrm, der mangler zq da document:

top.opener.document.form2.besked
Avatar billede q^bone Nybegynder
01. november 2005 - 16:40 #23
Det har jeg gjort nu, og jeg har ændre mine links til:

<a href=\"#\" onclick=\"top.opener.insertText(top.opener.document.form2.besked,'".$smileys['smiley']."',true);setTimeout(self.close()',500);return false;\">".$smileys['smiley_path']."</a>

no luck
Avatar billede q^bone Nybegynder
01. november 2005 - 16:42 #24
Men jeg forstår ikke..
top.opnener.insertText() er jo en funktion vi selv har lavet, og den ligger kun defineret i index.php og ikke i popuppen, kan popuppen så godt stadig finde ud af det?
Avatar billede roenving Novice
01. november 2005 - 16:58 #25
Ja, for top.opener henviser jo direkte til hovedvinduet !-)

-- hvis du skal debugge mere ville det sikkert være hensigtsmæssigt, at du indsatte status-linje i popuppen, eller bare at prøve med FireFox og kigge i javascript-konsollet !-)

-- og en fejl er åbenbart, at du har overset en pling !o]

onclick="top.opener.insertText(top.opener.document.form2.besked,':-)',true);setTimeout('self.close()',500);return false;">

-- så din php-kode bliver:

<a href=\"#\" onclick=\"top.opener.insertText(top.opener.document.form2.besked,'".$smileys['smiley']."',true);setTimeout('self.close()',500);return false;\">".$smileys['smiley_path']."</a>
Avatar billede q^bone Nybegynder
01. november 2005 - 18:58 #26
Ja ok, nu virker det også her.
Eneste som ikke virker er at sætte smileys ind hvor cursoren er placeret.
FireFox javascript console giver ingen error.
Avatar billede roenving Novice
01. november 2005 - 19:07 #27
Prøv i textarea-tagget at ændre til:

onblur="cursorpos = null;alert('blur på textarea !-)');"

for at teste !o]

-- og fortæl så, hvornår den forekommer ...
Avatar billede q^bone Nybegynder
01. november 2005 - 19:10 #28
Det virker, den skriver blur på textarea
Avatar billede roenving Novice
01. november 2005 - 19:12 #29
Hvornår ?-)

-- hvis den gør det ved tryk på Smiley-knappen, skal onblur fjernes fra tagget ...
Avatar billede q^bone Nybegynder
01. november 2005 - 19:13 #30
Det gør den.
prøver lige at fjerne den.
Avatar billede q^bone Nybegynder
01. november 2005 - 19:15 #31
Og nu virker det.. Du er fantastisk Roenvig!
smid et svar så du kan få dine vefortjente point, og tusind tak for hjælpen :)
Avatar billede roenving Novice
01. november 2005 - 19:18 #32
-- men jeg så lige, at den ikke lukker popuppen ?-)
Avatar billede q^bone Nybegynder
01. november 2005 - 19:18 #33
Nej det gør den egnetlig ikke.
Hmm hvordan kan det være :S
Avatar billede q^bone Nybegynder
01. november 2005 - 19:20 #34
hmm er der en funktion i javacsript som hedder setTimeOut() ??
For ellers skal den vidst først lige tilføjes.
Avatar billede q^bone Nybegynder
01. november 2005 - 19:21 #35
kan man ikke bare sige self.close? istedet for at have timeout? eller kan det gøre noget rod?
Avatar billede roenving Novice
01. november 2005 - 19:22 #36
Argh, den skal da også have top på !o]

<a href=\"#\" onclick=\"top.opener.insertText(top.opener.document.form2.besked,'".$smileys['smiley']."',true);setTimeout('top.close()',500);return false;\">".$smileys['smiley_path']."</a>

-- ja, javascript har en funktion, der hedder setTimeout (bemærk store og små bogstaver !-)

-- els velbekomme '-)
Avatar billede q^bone Nybegynder
01. november 2005 - 19:24 #37
Smukt!
Avatar billede roenving Novice
01. november 2005 - 19:30 #38
-- og tak for point ;~}
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