Tällä tavalla pystyy lisäämään tekstiä textarean loppuun, mutta tietäiskö joku miten tekstin sais siihen kohtaan, jossa kursori on.
<html> <body> <form method="post" name="formi"> <script type="text/javascript"> function insertext(text){ document.formi.teksti.focus(); document.formi.teksti.value+=" "+ text; document.formi.teksti.focus(); } </script> <textarea cols="40" rows="6" name="teksti"></textarea> <a href="javascript:insertext('Teksti')">Lisää teksti</a> </form> </body> </html>
Vai onnistuisko vaikka php:llä
Eipä voi tehdä php:ä, koska php ei tiedä missä kursori on. Voisi tuon tietty tehdä onFocus() funktiolla, mutta se tekisi lisäyksen aina, kun hiirellä tökkää inputtia. Merri luultavasti keksii ongelmaan säällisen ratkaisun.
Nettihaulla löytyi koodia, jonka väitetään kertovan, missä kohdassa kursori (tässä yhteydessä caret) on.
http://blog.vishalon.net/Post/57.aspx
Tuota saattaa pystyä soveltamaan. Uuden tekstin voi lisätä funktion kertomaan paikkaan textarean value-kenttään. (En nyt kerkeä itse testata, mistä pahoitteluni.)
On tuolla tosiaan neuvottu miten kursorin paikan saa selville, mutta se ei näyttäisi ratkaisevan itse ongelmaa, koska
document.formi.teksti.value+=" "+ text
lisää tekstin jokatapauksessa loppuun. Ilmeisesti pitäisi osata jakaa valuen vanha teksti kahteen kursorin kohdalta, mutta taitaa olla ainakin mulle liian hapokasta.
string.slice on mahdollinen ratkaisu.
<html> <body> <script type="text/javascript"> var str ="Ohjputka"; var ins ="elmointi"; var beg = str.slice(0, 3); var end = str.slice(3); document.write(beg + ins + end); </script> </body> </html>
slice-funktiota voi kutsua kahdella eri tavalla. Alku otetaan nollasta siihen indeksiin kahdella argumetnilla ja loppu taas saadaan yhdellä argumentilla siitä indeksistä. Kokeile eri arvoja, niin toiminta selviää helposti.
Jos joku tietää luontevamman tavan, kertokaa ihmeessä. Just nyt ei ole paras aika JavaScriptailla...
Heippa hauki!
tässä sulle viritys...
<html><head><title>test</title> <script> var alku; var loppu; function funktio(){ var alku = ""; var loppu = ""; //Alt + 255 if (document.all('txtArea').value.indexOf(' ') == -1 && document.all('txtArea').value.length > 0) { str=(typeof(str)=='string')?str: ' '; // välilyönti sel = document.selection.createRange(); sel.text = ' '; //Alt + 255 loppu = document.all('txtArea').value.substring(document.all('txtArea').value.indexOf(' ')); alku = document.all('txtArea').value.replace(loppu, ""); //Alt + 255 loppu = loppu.replace(" ", ""); document.all('txtArea').value = alku + document.all('txt').value + loppu; } } </script></head><body> <input type="text" id="txt"/><br> <textarea id="txtArea" onclick="funktio()"> </textarea></body></html>
Ehdin jo Kopeekkan avulla rueta väsäämään tällästä ja vaikuttas toimivan
<html> <body> <form method="post" name="formi"> <script type="text/javascript"> function insertext(text){ var alkuteksti=document.formi.teksti.value; var alku=alkuteksti.slice(0, (etsikursori('teksti'))); var loppu=alkuteksti.slice(etsikursori('teksti')); document.formi.teksti.focus(); document.formi.teksti.value=alku + text + loppu; } function etsikursori (ctrl) { var paikka = 0; // IE Support if (document.selection) { document.formi.teksti.focus (); var Sel = document.selection.createRange (); Sel.moveStart ('character', -document.formi.teksti.value.length); paikka = Sel.text.length; } // Firefox support else if (document.formi.teksti.selectionStart || document.formi.teksti.selectionStart == '0') paikka = document.formi.teksti.selectionStart; return (paikka); } </script> <textarea cols="40" rows="6" name="teksti"></textarea> <a href="javascript:insertext('Teksti')">Lisää teksti</a> </form> </body> </html>
Tällä aion tehdä pikanäppäimiä esim. hyperlinkin lisäykseen. Kiitti molemmille avusta, tutkin myös ton Nean vinkin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.