Avatar billede netro Nybegynder
24. februar 2004 - 20:04 Der er 17 kommentarer og
1 løsning

Indsæt tegn i tekst dér hvor cursoren står

Hvordan er det muligt at indsætte f.eks. en smiley lige dér, hvor cursor'en står i en tekst, uden at smiley'en blot hæftes i enden af teksten? Når den er indsat, skulle cursor'en gerne stå lige efter den nyindsatte smiley.

Det er sikkert noget IE-specifikt, men jeg vil gerne have en løsning alligevel.

<form name="form">
<input type="button" onClick="this.felt.value=this.felt.value+':)';">
<textarea name="felt">kjh jrhgs h stksj thsj hsh</textarea>"
</form>
Avatar billede skovenborg Nybegynder
24. februar 2004 - 23:41 #1
prøv:
<script type="text/javascript">
function strInsert(input_str,insert_str,insert_position) {
        return input_str.substring(0,insert_position)+insert_str+input_str.substr(insert_position);
}
var fokus = false;
function insertSmiley(frmElm,smiley) {
        if (frmElm.selectionEnd) {frmElm.value = strInsert(frmElm.value,smiley,frmElm.selectionEnd);}
        else if (document.selection.createRange && fokus) {r = document.selection.createRange();r.text = smiley;}
        else frmElm.value += smiley;
}
</script>

<form name="form">
<input type="button" onmousedown="insertSmiley(this.form.felt,':-)');">
<textarea name="felt" onfocus="fokus = true;" onblur="fokus = false;">kjh jrhgs h stksj thsj hsh</textarea>
</form>
Avatar billede skovenborg Nybegynder
24. februar 2004 - 23:45 #2
inden jeg kommer for godt i gang skal jeg lige give lidt credit til grunken som lavede IE-delen af scriptet:
http://www.eksperten.dk/spm/409177
Avatar billede netro Nybegynder
24. februar 2004 - 23:48 #3
CreateRange fungerer kun i IE, ik'?
Avatar billede skovenborg Nybegynder
24. februar 2004 - 23:53 #4
jo det er derfor jeg bruger selectionEnd, som er den mest direkte måde at gøre det på i mozilla
Avatar billede skovenborg Nybegynder
24. februar 2004 - 23:53 #5
...hov inden jeg kommer for hurtigt i gang, så kan man godt lave disse ranges i mozilla - det er mere document.selection som der kun virker i IE ;-)
Avatar billede skovenborg Nybegynder
24. februar 2004 - 23:55 #6
...læg desuden mærke til at hvis browseren ikke kender nogle af disse ting så indsætter den bare smileyen til sidst.
Avatar billede skovenborg Nybegynder
24. februar 2004 - 23:58 #7
...og så kan man lige sikre sig at IE ikke indsætter den til sidst hvis der ikke er fokus på den:
function insertSmiley(frmElm,smiley) {
        if (frmElm.selectionEnd) {frmElm.value = strInsert(frmElm.value,smiley,frmElm.selectionEnd);}
        else if (document.selection && fokus) {alert("JADA");r = document.selection.createRange();r.text = smiley;}
        else if (document.selection == undefined) frmElm.value += smiley;
        else;
}
Avatar billede netro Nybegynder
25. februar 2004 - 18:17 #8
Det ser spændende ud. Jeg prøver det snart.
Avatar billede netro Nybegynder
25. februar 2004 - 22:05 #9
Det virker tilsyneladende præcis efter hensigten i alle nyere browsere (bortset fra Opera). Cursor'en stiller sig dog ikke efter den nyindsatte smiley - men forsvinder helt. Det betyder, at der i IE kun kan klikkes én gang på knappen af gangen. Hvordan løses det?
Avatar billede skovenborg Nybegynder
25. februar 2004 - 22:17 #10
du kan fx skrive:
<input type="button" onmousedown="insertSmiley(this.form.felt,':-)');" onmouseup="this.form.felt.focus();">

Forresten glemte jeg at fjerne alert("JADA"); i funktionen - så husk lige at slette den ;-)
Avatar billede netro Nybegynder
25. februar 2004 - 22:27 #11
Ja, i IE virker det glimrende, men Netscape sætter cursor'en i slutningen af teksten, efter smiley'en er indsat et sted midt i teksten. Er det muligt at undgå?
Avatar billede skovenborg Nybegynder
25. februar 2004 - 22:51 #12
hmm, umiddelbart ved jeg det ikke lige - men det kan være jeg kan finde ud af noget...
Avatar billede skovenborg Nybegynder
25. februar 2004 - 23:17 #13
jo, minsandten om det ikke lykkedes :-)
<script type="text/javascript">
function strInsert(input_str,insert_str,insert_position) {
        return input_str.substring(0,insert_position)+insert_str+input_str.substr(insert_position);
}
var fokus = false;
    var cursorpos;
    function insertSmiley(frmElm,smiley) {
        if (frmElm.selectionEnd != undefined) {cursorpos=frmElm.selectionEnd+smiley.length;frmElm.value = strInsert(frmElm.value,smiley,frmElm.selectionEnd);}
        else if (document.selection && fokus) {r = document.selection.createRange();r.text = smiley;}
        else if (document.selection == undefined) frmElm.value += smiley;
        else;
    }
    function mozPlaceCursor(frmElm) {
        if (frmElm.selectionEnd != undefined && cursorpos != undefined) {
            frmElm.setSelectionRange(cursorpos,cursorpos);
        }
    }
</script>

<form name="form1">
<input type="button" onmousedown="insertSmiley(this.form.felt,':-)');" onmouseup="this.form.felt.focus();mozPlaceCursor(this.form.felt);">
<textarea name="felt" onfocus="fokus = true;" onblur="fokus = false;">kjh jrhgs h stksj thsj hsh</textarea>
</form>
Avatar billede netro Nybegynder
26. februar 2004 - 19:54 #14
Det er så flot! Nu virker det perfekt i alt andet end Opera. Ved du, om de har nogle planer om at understøtte createrange i næste version?
Avatar billede skovenborg Nybegynder
26. februar 2004 - 22:06 #15
nej desværre - Opera nævner ikke noget direkte på deres hjemmeside. Men i deres forum er der mange der spørger om netop dette emne med cursor positions, og mange mener der bør være en mulighed for det. Desuden er fx createRange en del af W3C's DOM standard og jeg mener Opera plejer at være nogenlunde tro mod disse - og med den opbakning kan jeg næsten ikke andet end tro at der må komme en mulighed for det i kommende versioner.

Men generelt må du også finde dig i at det ikke virker i alle browsere, da metoderne er forholdsvis nye - i hvert fald mozillas, med deres selectionEnd og -Start, som først i nyere versioner har virket ordentligt. Men så længe smileyen i hvert fald bliver placeret til sidst burde de flestes behov også være nogenlunde dækket - selvom jeg er enig i at det ville være bedst selv at kunne bestemme. Desuden er jeg sikker på mange også efterhånden vil nøjes med blot at skrive smileyen i stedet for at trykke på en knap - det går jo også meget hurgtigere ;-)
Avatar billede netro Nybegynder
27. februar 2004 - 15:32 #16
Du skal have tak. Smid et svar :)
Avatar billede skovenborg Nybegynder
27. februar 2004 - 15:49 #17
jamen værsågod - og tak for spørgsmålet. Det var interesant at få det til at virke ordentligt i både IE og Mozilla :-)
Avatar billede netro Nybegynder
27. februar 2004 - 16:09 #18
Den havde jeg ikke hørt før ;) Velbekomme...
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