26. oktober 2005 - 12:47Der 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å :)
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.
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".
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:
<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>
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:
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:
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?
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]
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.