Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    160

    Possibile bug nello script (codice HTML in textarea) di 'Shores'

    ciao a tutti,
    sto utilizzando lo script (utilissimo!) che riporto sotto per implementare un mini editor, quando mi sono accorto di uno strano problema.
    Seleziono ad es. una parola > inserisco il tag desiderato > riseleziono solo la parola stessa per inserire altri tags (quindi annidandoli) > il codice mi viene stampato al di fuori della textarea.
    Ho provato a smanettare sul codice ma le mie conoscenze di javascript sono alquanto limitate. :-(
    Mi confermate anche voi questo problema e magari come risolverlo?

    Grazie a tutti in anticipo
    ---
    <script language="javascript">
    <!--
    function storeCaret ()
    {
    if (document.forms[0].elements[0].createTextRange)
    document.forms[0].elements[0].caretPos = document.selection.createRange().duplicate();
    }

    function insertAtCaret (text)
    {
    if (document.forms[0].elements[0].createTextRange && document.forms[0].elements[0].caretPos) {
    var caretPos = document.forms[0].elements[0].caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
    }
    else
    document.forms[0].elements[0].value = text;
    }

    function seltext()
    {
    if (document.getSelection)
    {
    var str = document.getSelection();
    }
    else if (document.selection && document.selection.createRange)
    {
    var range = document.selection.createRange();
    var str = range.text;
    }
    else
    {
    var str = "";
    }
    return str;
    }

    function docmd(comm){
    switch (comm) {
    case "ACapo":
    if (seltext()=="")
    insertAtCaret("
    \n");
    break;
    case "Titolo" :
    if (seltext()=="")
    insertAtCaret(" <div class='titolo'> </div>\n");
    else
    insertAtCaret(" <div class='titolo'> " + seltext() + " </div>\n")
    break;
    case "STitolo" :
    if (seltext()=="")
    insertAtCaret(" <div class='sottotitolo'> </div>\n");
    else
    insertAtCaret(" <div class='sottotitolo'> " + seltext() + " </div>\n")
    break;
    case "Grass" :
    /*if (seltext()!="")*/
    insertAtCaret("" + seltext() + " ");
    break;
    case "Link" :
    if (seltext()!="") {
    value=prompt("Inserisci l'indirizzo di destinazione completo di http:// nella casella sottostante","");
    insertAtCaret(" " + seltext() + " ");}
    break;
    case "Link2" :
    if (seltext()!="") {
    value=prompt("Inserisci l'indirizzo di destinazione completo di http:// nella casella sottostante","");
    insertAtCaret(" [img]img/bull.gif[/img] " + seltext() + " ");}
    break;
    case "Immagine" :
    if (seltext()=="")
    insertAtCaret(" <img> ");
    break;
    default :
    break;
    }
    }


    //-->
    </script>

    <textarea onselect="storeCaret();" onclick="storeCaret();" onkeyup="storeCaret();"></textarea>

  2. #2
    Sono qui.

    No, sul mio browser non dà affatto questo tipo di problema, mai.

    Non è che puoi postare un link alla pagina in cui lo usi, che vediamo quale è il problema?

    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    160
    grazie...
    Purtroppo faccio delle prove ancora in locale e non ho uno spazio web però cerco di allegare il layout di quanto succede.

    Utilizzo IE6 e la cosa strana è questa (giuro che non bevo!! ): se clicco due volte sul testo allora mi viene stampato al di fuori della textarea, se invece lo seleziono trascinando il mouse o con i tasti cursore va bene e il problema non si presenta....
    Ho provato aggiungendo l'attributo ondblclick (<textarea onselect="storeCaret();" ondblclick="storeCaret();" onclick="storeCaret();" onkeyup="storeCaret();"></textarea>) e il problema è scomparso.

    E' possibile dunque che sia solo un problema di come venga fatta la selezione del testo?
    Immagini allegate Immagini allegate

  4. #4
    Certo!

    Tieni presente che la funzione storecaret viene chiamata proprio per segnarsi il punto in cui deve essere poi inserito il testo con la insertatcaret, quindi è certo che non funzioni se selezioni con doppio click e non hai la onDoubleClick...

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.