8
votes

Attraper des onglets dans Texarea

Est-ce que quelqu'un connaît une solution fiable et fiable pour attraper des presses de la clé à tabulation dans un champ Texarea et remplacer (dans la position correcte) 4 espaces? Le Textarea est utilisé pour saisir un essai et a besoin de cette fonctionnalité.

Remarque: j'ai essayé d'utiliser FCKeditor, entre autres, ce qui n'a pas attrapé des onglets et n'avait pas eu de traits que je n'avais pas besoin. Je veux une solution simple juste pour attraper des onglets.


2 commentaires

Peut-être dupliqué Stackoverflow.com/Questtions/3362/ Capturer-Tab-Key-in-text-b ox


Cette solution ne fonctionne pas en ligne (si des onglets se produisent au milieu de la chaîne) je pense


3 Réponses :


-1
votes

y a-t-il une raison pour laquelle vous ne pouvez pas simplement remplacer les onglets après la modification? J'ai déjà joué un peu de texte en remplaçant du texte tout en tapant dans une Textarea et l'a trouvé comme étant ... de manière irréaliste.


2 commentaires

Le point est que l'utilisateur doit pouvoir insérer des "onglets" lorsqu'il utilise la page, mais par défaut, les cycles de touches d'onglets se concentrent sur l'élément suivant.


Ensuite, vous entrez dans des implémentations de navigateur sur le navigateur sur le navigateur, ce qui est quelque chose que je n'ai jamais été assez courageux pour essayer. Bonne chance!



9
votes

Je n'ai pas fait de tès beaucoup de test, mais cela semble fonctionner:

(J'ai trouvé la fonction "insertcursor" à http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-javascript#Comment -3817 ) xxx

edit : modifié le script afin qu'il n'utilise pas jQuery.


0 commentaires

0
votes
<html>
<head>
    <script type="text/javascript">

        function keyHandler(e) {
            var TABKEY = 9;
            var backSlash = 8;
            var code = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which;
            if(code == TABKEY && !e.shiftKey && !e.ctrlKey && !e.altKey) {
            var val = document.getElementById("t1");
                val.value=(val.value).substring(0,getCaret(val)) + "    " + (val.value).substring(getCaret(val));
                //document.getElementById("t1").value += "    ";

                if(e.preventDefault) {
                    e.preventDefault();
                } else {
                    e.returnValue = false;
                }
                val.focus(); 
                return false;
            }
            if(code == backSlash) {
                var val = document.getElementById("t1");
                val.value=(val.value).substring(0,getCaret(val)-4) + (val.value).substring(getCaret(val));
                if(e.preventDefault) {
                    e.preventDefault();
                } else {
                    e.returnValue = false;
                }
                return false;
            }

        }

        function getCaret(el) { 
          if (el.selectionStart) { 
            return el.selectionStart; 
          } else if (document.selection) { 
            el.focus(); 

            var r = document.selection.createRange(); 
            if (r == null) { 
              return 0; 
            } 

            var re = el.createTextRange(), 
                rc = re.duplicate(); 
            re.moveToBookmark(r.getBookmark()); 
            rc.setEndPoint('EndToStart', re); 

            return rc.text.length; 
          }  
          return 0; 
        }
    </script>
</head>
<body>
 <textarea id="t1" onkeydown="javascript:keyHandler(event)"></textarea>

</body>
</hrml>

0 commentaires