0

重複の可能性:
textarea で <tab> を処理するには?

テキストエリアでタブレベルを維持する方法が必要です。これまでのところ、これは私が使用したものです:

<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の専門家ではないので、それが何をするのか本当にわかりません)

Return キーを押したときにそれらのタブがそこにあるようにする方法はありますか? これが必要なのは、管理パネル用の非常に単純なコード エディター (構文の強調表示などは必要ありません) を作成しており、TextAreas を使用しているためです。

ありがとう!

4

1 に答える 1

1

私はこれが芸術作品であるとは断言できません。ほんの数分で一緒に投げました。多少の改良が必要ですが、正しい方向に進むはずです。

グローバル変数

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

編集-ユーザーがタブセットを解除したいかどうかを確認するための重要な手順を追加しました。

ドムレディ機能

$(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 = '';     
        }
    }); 
});​

これが動作するjsFiddleです

あまりテストする機会があまりありませんでした。薄っぺらすぎる場合はお知らせください。やり直しに戻ります。

于 2012-10-18T01:33:46.227 に答える