使用AJAX在textarea中保留标签?

时间:2012-10-18 01:01:54

标签: jquery html tabs

  

可能重复:
  How to handle <tab> in textarea?

我需要一种方法来维护textarea中的标签级别,到目前为止这是我使用过的:

<script type="text/javascript">
   $("textarea").keydown(function(e) {
      var $this, end, start;
      if (e.keyCode === 9) {
         start = this.selectionStart;
         end = this.selectionEnd;
         $this = $(this);
         $this.val(
            $this.val().substring(0, start)
            + "\t" + $this.val().substring(end)
         );
         this.selectionStart = this.selectionEnd = start + 1;
         return false;
      }
   });
</script>

但这只是插入标签(我发现这个在另一个SO帖子上,所以我真的不知道它做了什么,因为我不是JS专家)

当我点击返回键时,这些标签是否有办法存在?我需要这个,因为我为我的管理面板制作了一个非常简单的代码编辑器(不需要语法高亮或任何东西),它使用TextAreas。

谢谢!

1 个答案:

答案 0 :(得分:1)

我绝对不认为这是一件艺术品,我在几分钟之内把它扔在了一起。它需要一些改进,但应该让你朝着正确的方向前进。

全局变量

var keyPressed = null;
var timesPressed = 0;
var tabString = '';
var lastKeyPressed = null;

编辑 - 添加了一个重要步骤,以查看用户是否要破坏标签集。

Dom ready函数

$(function(){
    $("textarea").keydown(function(e) {
        var $this, end, start;
        if (e.keyCode === 9 || e.which === 9) {
            start = this.selectionStart;
            end = this.selectionEnd;
            $this = $(this);
            $this.val(
               $this.val().substring(0, start)
               + "\t" + $this.val().substring(end)
            );
            this.selectionStart = this.selectionEnd = start + 1;
            keyPressed = e.keyCode || e.which;
            timesPressed = timesPressed +1;
            return false;
        }else if((e.keyCode === 13 || e.which === 13) && keyPressed === 9){
            start = this.selectionStart;
            end = this.selectionEnd;
            $this = $(this);
            tabString += '\t';
            $this.val(
            $this.val().substring(0, start)
                + "\r"+tabString + $this.val().substring(end)
            );
            this.selectionStart = this.selectionEnd = start + timesPressed +1;
            lastKeyPressed = e.keyCode;
            return false;          
        }else if((e.keyCode === 8 || e.which === 8) && lastKeyPressed === 9){
            keyPressed = null;   
            timesPressed = 0; 
            tabString = '';     
        }
    }); 
});​

Here's a working jsFiddle

我真的没有太多机会去测试它。让我知道它是否太脆弱,我会重新加工它。