2016-12-22 5 views
3

私はテキストエリアでタブをシミュレートしようとしていますが、これまでのタブフォワードは機能していますが、バックタブをどのように動作させるかはよくわかりません。どのようにこれを行うか、またはそれを行うためのよりよい方法に関する提案は役に立ちます。テキストエリアのバックタブをシミュレートする方法

$('textarea').on('keydown mousedown', function(e){ 
    var val = this.value, 
     start = this.selectionStart, 
     end = this.selectionEnd; 
    if (e.shiftKey) { 
    console.log('shift') 
    if (e.which == 9 || e.keyCode == 9) { 
     console.log('shift + tab') 
     e.preventDefault(); 
     this.value = val.substring(0, start) + '\t' + val.substring(end); 
    } 
    } else if (e.which == 9 || e.keyCode == 9) { 
    console.log('tab') 
    e.preventDefault(); 
    this.value = val.substring(0, start) + '\t' + val.substring(end); 
    } 
}) 
+0

私はあなたを正しく理解していれば、行頭に '\ t'文字があればそれを削除するようにテキスト領域を編集したいでしょうか?あなたはどのブラウザをターゲットにしていますか? pre IE8では、おそらくテキスト範囲を混乱させる必要があります。そうでなければ、selectionStart/selectionEndを使って現在の行を探し出し、その行の\ tの最初のインスタンスを削除することができます。 – wackozacko

+0

これは本当に重要ですか?私はあなたがブラウザの期待される動作を無効にしているので、これを尋ねます。私は軽く軽くはしません。 – Bindrid

+0

サイドプロジェクトでコードエディタを構築していますが、これは各コードパネルで使用されているテキストエリアをオーバーライドするだけです。上記のコードは単なる例です。最終的なコードはすべてのテキストエリアを対象としません。 – halfacreyum

答えて

2

サイドノートとして

$('textarea').on('keydown mousedown', function(e) { 
 
    var val = this.value, 
 
     start = this.selectionStart, 
 
     end = this.selectionEnd; 
 

 
    if (e.which == 9 || e.keyCode == 9) { 
 
    e.preventDefault(); 
 
    
 
    if (e.shiftKey) { 
 
     var firstTabPoint = val.lastIndexOf('\n', start) + 1; 
 

 
     if (val.substring(firstTabPoint, firstTabPoint + 1) == '\t') { 
 
     var startString = val.substr(0, firstTabPoint); 
 
     var endString = val.substr(firstTabPoint + 1); 
 

 
     this.value = startString + endString; 
 
     this.setSelectionRange(start - 1, end - 1); 
 
     } 
 
    } else { 
 
     this.value = val.substring(0, start) + '\t' + val.substring(end); 
 
     this.setSelectionRange(start + 1, end + 1); 
 
    } 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea rows="20" cols="100"> 
 
Add some lines in here, tab them, and then try untabbing. 
 
</textarea>

テキストエディタアプリケーションを作っている場合は、属性contenteditable="true"に見えるかもしれません。

+0

ありがとう、答えのために!このプロジェクトを始める前に私は満足できるattrについて聞いていなかったので、私はそれを調べます。どちらか一方を使用する利点/欠点はありますか? – halfacreyum

+0

contenteditable要素では、その中の任意のテキストを編集できますが、その中にはタグを使用できます。したがって、テキストエリアでは不可能な構文強調表示やコードエディタに役立つその他の機能を実装することができます。 – wackozacko

+0

恐ろしい、情報をありがとう。それを今見て。 – halfacreyum

関連する問題