24. februar 2004 - 20:04Der 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.
...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; }
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?
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å?
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>
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 ;-)
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.