• Super User

    Inserire tag in textarea dove è posizionato il cursore

    Salve, ho un problemino... in pratica ho inserito un javascript che permette la formattazzione rapida di una textarea. Ad esempio per inserire uno smilie è un po' come su vbullettin che basta cliccare sullo smilie desiderato perchè il bbcode appaia a nella textarea... il problema è che il bbcode viene sempre inserito in fondo alla textarea mentre vorrei che venisse inserito dove si trova il cursore... come faccio?

    Javascript:

    
    function smile(smile) {
        document.sendpm.message.value += smile+" ";
        document.sendpm.message.focus(); 
    }
    
    
    
    <img src="img/smile/smile1.gif" onclick="smile('[:)]')">
    
    

  • ModSenior

    Ciao max0005,

    Questo dovrebbe fare al caso tuo:

    
    <textarea id="testo"></textarea>
    
    <script type="text/javascript">
    function insertTesto(nomeTextArea, aggiungi)
    {
     var idTextArea=document.getElementById(nomeTextArea); 
     if(document.all)
     { 
      idTextArea.focus(); 
      var sel=document.selection; 
      var rng=sel.createRange(); 
      rng.colapse; 
      rng.text=aggiungi; 
     } else if(idTextArea.selectionEnd)
     { 
      var lng=idTextArea.textLength; 
      var from=idTextArea.selectionStart; 
      var to=idTextArea.selectionEnd; 
      idTextArea.value = idTextArea.value.substring(0,from)+aggiungi+idTextArea.value.substring(to,lng) 
     } else idTextArea.value+=aggiungi; 
     idTextArea.focus(); 
    }
    </script>
    
    <img src="img/smile/smile1.gif" alt="lol" onclick="insertTesto('testo', '[:)]');">
    
    

  • Super User

    Grazie thedarkita funziona! 😄 L'unica cosa quando clicco per inserire il cursore si "trasferisce" sull'ultima riga della textarea. Questo significa che se io ho come priga riga del messaggio una riga vuota e clicco per inserire fa apparire il bbcode sull'ultima riga però è una possibilià remota quindi nessun problema. 🙂


  • ModSenior

    Prova cosi:

    
    <script type="text/javascript">
    function setCurPos(nomeTextArea, nuovaPosizioneSelezione)
    {
       selezione=document.getElementById(nomeTextArea);
     
       if (selezione.createTextRange)
       {
            var range = selezione.createTextRange();
            range.collapse(true);
            range.moveEnd('character', nuovaPosizioneSelezione);
            range.moveStart('character', nuovaPosizioneSelezione);
            range.select();
       }
       else if (selezione.setSelectionRange)
       {
          selezione.focus();
          selezione.setSelectionRange(nuovaPosizioneSelezione, nuovaPosizioneSelezione);
       }
    }
    
    function insertTesto(nomeTextArea, aggiungi)
    {
     var idTextArea=document.getElementById(nomeTextArea); 
     if(document.all)
     { 
      idTextArea.focus(); 
      var sel=document.selection; 
      var rng=sel.createRange(); 
      rng.colapse; 
      rng.text=aggiungi; 
     } else if(idTextArea.selectionEnd)
     { 
      var lng=idTextArea.textLength; 
      var from=idTextArea.selectionStart; 
      var to=idTextArea.selectionEnd; 
      idTextArea.value = idTextArea.value.substring(0,from)+aggiungi+idTextArea.value.substring(to,lng) 
     } else idTextArea.value+=aggiungi; 
     idTextArea.focus();
     setCurPos(nomeTextArea, from); 
    }
    </script>
    
    

  • Super User

    Provato. Sembra che funzioni... non mi da più nessuno dei problemi(ni) che mi dava prima. Grazie!!! 🙂


  • ModSenior

    Figurati. 😉