Newsgroup: it.comp.lang.javascript
Titolo: inserire in textarea un segnaposto numerato progressivamente

Ho bisogno di inserire in una textarea un segnaposto numerato 
progressivamente,
e se poi fosse addirittura grafico (una piccola gif con un numero testuale 
sopra)
sarei l'uomo piů felice del mondo. :-))
 
Sono riuscito a fare questo scopiazzando sul web:
 
<a href="#" onClick="addBookmark('COMPFRASE', '[#]')">Segnaposto</a>
 
che chiama la funzione:
 
function addBookmark(TextareaID, TextToAdd)
{
    var MyTextarea = document.getElementById(TextareaID);
    if (document.all)
    {
        MyTextarea.focus();
        var MyRange = document.selection.createRange();
        MyRange.colapse;
        MyRange.text = TextToAdd;
    }
    else if (MyTextarea.selectionEnd)
    {
        var MyLength = MyTextarea.textLength;
        var StartSelection = MyTextarea.selectionStart;
        var EndSelection = MyTextarea.selectionEnd;
        MyTextarea.value = MyTextarea.value.substring(0, StartSelection) + 
TextToAdd + MyTextarea.value.substring(EndSelection, MyLength);
    }
    else
    {
        MyTextarea.value += TextToAdd;
    }
    MyTextarea.focus();
}
cliccando su questo link mi inserisce [#] nella posizione del cursore,
ma io vorrei aggiungere un numero progressivo per ogni segnaposto ([#1] [#2] 
[#3] ecc.
Come inserire un indice incrementale? A naso, se nella funzione assegno ad 
una
variabile il valore 1 per poi incrementarlo alla fine, ogni volta che clicco 
mi parte
da 1.
 
Inoltre, il focus, una volta inserito il segnaposto, pone il cursore SUBITO 
PRIMA del segnaposto,
mentre io vorrei che si posizionasse DOPO, in modo da continuare a scrivere.
 
 
-- ciao!
 
...nixs.................................................................
nixs.lucchetto.@lagirandola.it
 
togli la ".SERRATURA." per scrivermi
........................................................................
L'uomo non smette di giocare perché invecchia,
ma invecchia perché smette di giocare.
(George Bernard Shaw) 
 

 
Devo dedurre che non si può fare?


 [#2] [#3] ecc.
 
questa function e metodo di richiamo sono arcaiche.
Comunque sia, basta una var globale "contatore=1", e quando la scrivi fai 
un contatore++.
Se non vuoi una var globale piazza il valore in un input hidden, oppure 
metti il tutto in un object.

metti il tutto in un object.
 
non ne sono capace, senza esempi


 non ne sono capace, senza esempi
 
non sei capace di creare una var globale? Basta dichiararla al di fuori 
di una function, o anche dentro senza "var":
 <
https://developer.mozilla.org/en/JavaScript/Guide/
 
Values,_Variables,_and_Literals#Variable_scope>

di una function, o anche dentro senza "var":
 
ci sono quasi, sono sulla buona strada:
 
ho creato questa:
 
<script type="text/javascript">
marker = 1;
 
$(function() {
     $(".bookmark").click(function() {
          var txt = $("textarea#COMPFRASE");
          txt.val(txt.val() + "[#" + marker + "]");
          marker++;
          $('#COMPFRASE').focus();
     })
})
</script>
 
con il comando:
<a href="#" class="link-command bookmark">Segnaposto</a>
 
sulla textarea:
<textarea cols="105" rows="6" name="FRASE" id="COMPFRASE"></textarea>
 
ma presenta un solo malfunzionamento:
 
i tag vengono posizionati davanti al cursore e non dietro di questo, quindi
per continuare a scrivere dopo il tag devo poi cliccare dopo il tag.
 
Come si fa a posizionare il cursore alla fine?


 Come si fa a posizionare il cursore alla fine?
 
boh, mai giocato con 'ste cose ... cercando in rete "focus() textarea 
end" mi compare subito questo:
 
http://www.webmasterworld.com/javascript/3410858.htm
 

 
http://www.webmasterworld.com/javascript/3410858.htm
 
 
non mi è stato utile, invece ho risolto così:
 
 
$(".bookmark").click(function() {
var temp;
    temp=$('#COMPFRASE').val();
    $('#COMPFRASE').val('');
    $('#COMPFRASE').focus();
    $('#COMPFRASE').val(temp + "[#" + marker + "]");
marker++; });
 
Inserisce il marker numerato e posiziona il cursore dopo di esso
 
grazie e ciao


 Inserisce il marker numerato e posiziona il cursore dopo di esso
 
Nota che se per qualche ragione l'utente non ha il cursore sempre alla
fine del campo di testo – esempio, sta modificando qualcosa che ha
precedentemente scritto – e poi clicca sul tuo pulsante, il bookmark
viene sempre e comunque aggiunto alla fine, cambiando la posizione
corrente del cursore.
 
Il fatto inoltre che dando il `focus` ti posizioni alla fine del campo
di testo, è arbitrario, ovvero non mi pare che sia menzionato da nessuna
parte nelle specifiche, il metodo rende solo l'elemento attivo. In
taluni casi o talune implementazioni del browser potrebbero differire
(posizionandolo, per esempio, all'inizio).
 
Detto questo, se i browser che vuoi supportare si comportano come ti
aspetti, e il fatto che il marker venga sempre aggiunto in coda
spostando la posizione corrente del cursore non ti crea problemi, puoi
lasciarlo così com'è.
 
Altrimenti, devi usare le API che ti ha mostrato Cristiano Larghi
(selection API e Range API) per ovviare al problema. Che è ovviamente un
pelo più complesso in quanto IE non supporta le selection API fino alla
versione 9.

 versione 9.
 
allora non è cosa per me :-))


 allora non è cosa per me :-))
 
Il "pelo più complesso" è che, se vuoi supportare IE<9, devi fare come
nell'esempio mostratoti da Cristiano e usare i Range invece che le
Selection API. Non è tanto più complesso, ma un "pelo" – sarebbe meglio
poter usare le Selection API e via.
 
Comunque è una decisione tua, è inutile complicare – anche di un pelo –
un codice del quale sei già soddisfatto, e che porterebbe potenzialmente
più complicazioni in generale. Se ti sta bene quello che hai non hai
bisogno di cambiarlo; l'importante è che tu sia consapevole sia delle
limitazioni di tale approccio, sia delle alternative migliori - in
termini di funzionalità – che hai.

 all'interno delle textarea.
 
Non voglio complicarmi la vita, non so cosa siano le API di cui parli.
Ho trovato moltissimi script per editor, con i soliti tastini per la
formattazione del testo ma niente che potesse servire al mio scopo.
Oltretutto cercavo un editor per scrivere semplici equazioni di
matematica e chimica ma ho fatto un buco nell'acqua.
 
Ciao
nixs