Newsgroup: it.comp.lang.javascript
Titolo: posizione cursore all'interno di una textarea

salve,
  sto usando dei campi textarea in una form.
A questi campi ho agganciato della funzioni che all'evento onKeyUp mi
controllano il contenuto del campo e se sono presenti dei particolari
caratteri me li sostituisce.
L'effetto indesiderato è che il cursore si posiziona sempre in fondo al
testo. E' possibile passare alla funzione la posizione del cursore in modo
che all'uscita dalla funzione stessa il cursore si riposizioni nella sua
posizione originale?
Grazie a tutti in anticipo...
Lupin
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 posizione originale?
io ho provato a fare come segue; adesso non so che tipo di funzione hai
definito tu ma a me il cursore rimane dov'č.
<html>
<head>
<script language=javascript>
 var contatore=0;
 function key(){//ogni 5 tasti premuti visualizza un messaggio
  contatore++;
  if (contatore==5){
   alert("messaggio");
   contatore=0;
   document.mioform.miatextarea.focus();
  };
 };
</script>
</head>
<body onload=javascript:mioform.miatextarea.focus()>
<form name=mioform>
 <textarea name=miatextarea onKeyUp=key()>ciao</textarea>
</form>
</body>
</html>
ciao ciao.
Enrico

La funzione č questa:
function sostcar(comp,repstr,pattern,attr){
var cc= comp;
var regexpobj = new RegExp(pattern,attr);
var val = new String(cc.value);
cc.value = val.replace(regexpobj,repstr);
}
e la richiamo cosě:
<html>
<head></head>
<body>
<form name="ins_ev" method="POST" action="">
<textarea name="luogo" rows="3" cols="55"
onKeyUp="sostcar(document.ins_ev.luogo,'\'','\u2019','g')"></textarea>
</form>
</body>
</html>
Il problema č che mi torna in ultima posizione....


Io ho trovato su internet questo script, che però funziona solo su IE (o,
per lo meno, a me non funziona su NN7). Se per te questo è sufficiente, puoi
provarlo...
<HTML>
 <HEAD>
  <SCRIPT language="javascript">
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)"></TEXTAREA>
   <BR>
   <INPUT TYPE="text" NAME="aText" SIZE="80">
   <BR>
   <INPUT TYPE="button" VALUE="insert at caret"
ONCLICK="insertAtCaret(this.form.aTextArea, this.form.aText.value)">
  </FORM>
 </BODY>
</HTML>
Ciao, Luca
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Il problema č che mi torna in ultima posizione....
mi sa che non si puň fare: infatti la funzione ogni volta che viene chiamata
(cioč ad ogni pressione di un tasto) sostituisce la stringa.
potresti fare un controllo preventivo:
if (regexpobj.test(cc.value)){
    cc.value = val.replace(regexpobj,repstr)
}
in questo modo non avviene la sostituzione della stringa ad ogni pressione
di tasto. perň, in caso affermativo, ti lascia di nuovo alla fine della
stringa.
altrimenti, se ti č possibile, potresti fare in modo che la ricerca avvenga
al termine della composizione della stringa cioč onBlur() anzichč onKeyUp()
ciaoCiao
Enrico