Avatar billede haken Nybegynder
25. juni 2003 - 16:40 Der er 16 kommentarer og
2 løsninger

Insert smiley ved cursor

Jeg har lavet er tagwall hvor man kan trykke på et smiley face og så skriver den automatisk :-) i text feltet.
Mit problem er at :-) altid bliver sat ind til sidst i teksten og ikke der hvor cursoren er placeret.

Ville blive utrolig glad hvis det er nogen der kan hjælpe mig med at løse dette problem.

Min kode ser sådan ud:

function smiley(smiley) {
  document.formular.felt.value = document.formular.felt.value + smiley
}
Avatar billede macho Praktikant
25. juni 2003 - 16:46 #1
utestet, men prøv dette:

function smiley(smiley) {
  document.formular.felt.value = document.formular.felt.value + smiley;
  document.formular.felt.focus();
}
Avatar billede haken Nybegynder
25. juni 2003 - 16:47 #2
Det virker ikke, det gør bare at cursoren står i text feltet efter :-) er indsat men :-) bliver stadig sat ind til sidst
Avatar billede roenving Novice
25. juni 2003 - 16:52 #3
Du skal have fat i textRanges, men dem har jeg ikke arbejdet med, bl.a. fordi de er M$-only ...
Avatar billede macho Praktikant
25. juni 2003 - 17:23 #4
På denne side bruger de den funktion du søger:
http://forum.snitz.com/forum/post.asp?method=Topic&FORUM_ID=107

måske du kan stille spørgsmålet dér i et af de mange fora...? Jeg har selv brugt dem meget og der er altid hjælp at hente (næsten ligesom hos eksperten.dk) :-)
Avatar billede swuppe Nybegynder
25. juni 2003 - 20:19 #5
Du bliver nødt til at gemme hvor cursoren er hver gang der sker noget i textfeltet, prøv noget i stil med:

<HTML>
<HEAD>
<SCRIPT>
function storeCaret (textEl) {
if (textEl.createTextRange)
textEl.caretPos = document.selection.createRange().duplicate();
}
function insertAtCaret (textEl, text) {
if (textEl.createTextRange && textEl.caretPos) {
var caretPos = textEl.caretPos;
caretPos.text =
caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?
text + ' ' : text;
}
else
textEl.value = text;
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="aForm">
<TEXTAREA NAME="aTextArea" ROWS="5" COLS="80" WRAP="soft"
ONSELECT="storeCaret(this);"
ONCLICK="storeCaret(this);"
ONKEYUP="storeCaret(this);"
>Lidt demo tekst så du kan prøve om det virker</TEXTAREA>
<BR>
<INPUT TYPE="button" VALUE="insert at caret"
ONCLICK="insertAtCaret(this.form.aTextArea,':o)');"
>
</FORM>
</BODY>
</HTML>

Ved ikke lige hvilke browsere det understøtter...
Avatar billede macho Praktikant
25. juni 2003 - 21:02 #6
->swuppe
Din function virker fint i IE, men i Opera v.703 sletter du al tekst i feltet, når du indsætter en smiley, som i øvrigt kun kan indsættes én gang (ligeledes i Opera). Har ikke mulighed for at teste i flere browsere :-(
Avatar billede swuppe Nybegynder
25. juni 2003 - 21:07 #7
macho: Tja sådan kan det jo gå når man ikke tester tingene :o) men hvis haken skal bruge Opera eller andre browsere det ikke fungerer i, så må vi jo tage det op. Jeg er bare lidt bange for at det ikke er helt trivielt så.
Avatar billede macho Praktikant
25. juni 2003 - 21:11 #8
->swuppe
du har ret, hvis haken skal bruge funktionen i f.eks. et lukket intranet e.lign. hvor de bruge IE, er det jo ligegyldigt. I øvrigt har jeg (for sjov skyld) installeret Netscape v.7, hvor der sker det samme som i Opera (teksten forsvinder) - Det er nok en ren IE-ting...
Avatar billede roenving Novice
26. juni 2003 - 00:30 #9
textRanges _er_ M$ only ...
Avatar billede haken Nybegynder
26. juni 2003 - 14:10 #10
Hej
Det skal bruges på internetter og ikke på et intranet så det ville være rigtigt fedt hvis det kunne virke i andre browsere end IE.
Jeg ved ikke om det er muligt at lave så det fungere til andre browsere end IE.
Ellers kan man vel teste hvilken browser brugeren har og så bruge:

function smiley(smiley) {
  document.formular.felt.value = document.formular.felt.value + smiley
}

hvis brugeren har en anden browser end IE.
Ved i om der er en bedre måde man kan gøre for at bruge det til andre browsere?
Avatar billede macho Praktikant
26. juni 2003 - 14:52 #11
Som Rønving skriver
quote
textRanges _er_ M$ only ...
unquote

Jeg har desuden fået tjekket
http://forum.snitz.com/forum/post.asp?method=Topic&FORUM_ID=107
i både Opera og Netscape. Heller ikke Snitz's funktion virker på den måde du ønsker det. Dog bliver teksten i feltet ikke slettet, når man indsætter en smiley, men smiley'en bliver bare indsat aller sidst i teksten. Jeg ved godt, at det ikke hjælper dig meget, men nu har du noget mere at holde dig til. Jeg kan ikke hjælpe mere! :-(
Avatar billede haken Nybegynder
26. juni 2003 - 14:56 #12
Jeg tror jeg har fundet grunden til at det hele forsvinder og der bare kommer et :-)
Efter else står der textEl.value = text hvis der står textEl.value = textEl.value.text burde den vel sætte :-) ind bagefter og ikke slette teksten.
Avatar billede macho Praktikant
26. juni 2003 - 15:03 #13
I IE sker der umiddelbart ikke noget ved at gøre, sådan som du foreslår, men i både Opera og Netscape bliver der skrevet "undefined" i tekst-feltet, når man klikker "insert a caret" - beklager, jeg står af her...
Avatar billede haken Nybegynder
26. juni 2003 - 15:06 #14
Jeg har nu gjort så det kun viser knappen med insert a carat hvis brugeren bruger IE ellers må man selv skrive :-)
Tak for hjælpen til jeg alle.
Kan i ikke smide nogle svar så jeg kan dele points ud.
Avatar billede swuppe Nybegynder
26. juni 2003 - 15:14 #15
Snitz's valg synes jeg er udemærket, men det er selvfølgelig et valg om hvad der er brugervenlighed og brugeropstruktion. Altså at den blot indsætter til slut i teksten hvis man ikke bruger IE....
Avatar billede macho Praktikant
26. juni 2003 - 15:16 #16
Jeg ville selv vælge Snitz's funktion, hvis ellers jeg kunne lokke koden ud via et af deres fora, da jeg ikke har stødt på noget bedre - good luck!
Avatar billede haken Nybegynder
26. juni 2003 - 15:18 #17
Jeg har valgt at bruge lidt fra begges jeres svar, derfor deler jeg points lige over.
Mange tak for hjælpen til jeg begge :-)
Avatar billede swuppe Nybegynder
26. juni 2003 - 15:23 #18
macho: Jeg vil tro at den kode de bruger er:
function insertsmilie(smilieface) {
  if (document.PostTopic.Message.createTextRange && document.PostTopic.Message.caretPos) {
    var caretPos = document.PostTopic.Message.caretPos;
          caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? smilieface + ' ' : smilieface;
    document.PostTopic.Message.focus();
} else {
  document.PostTopic.Message.value+=smilieface;
  document.PostTopic.Message.focus();
}
}
haken: god fornøjelse med det ;o)
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