2014-02-11 2 views
3

사용자가 Enter 키를 누르면 커서를 새 행으로 이동 시키지만 현재 두 개의 탭으로 들여 쓰기되어 있으면 커서는 두 개의 탭으로 들여 있어야합니다.Enter 키를 누를 때 텍스트 영역의 탭 수준을 어떻게 유지합니까?

페이지 내에서 포커스 이동을 중지하기 위해 이미 탭 무시 이벤트를 구현 했으므로 이제는 탭 레벨을 새 라인에 유지하기위한 로직을 찾고 있습니다.

if(e.keyCode === 13){ 

    //Logic here 
} 
+2

당신은 유지하기 위해 필요에 따라 텍스트 영역의 텍스트 끝에 탭 또는 공백을 추가 한 후 현재 탭 수준을 유지하는 폼 클래스 로컬 변수를 유지해야하고,거야 그 탭 수준. 사용자가 원하는 경우 탭 레벨을 줄일 수 있도록 Shift-Tab을 연결해야합니다. –

답변

4

http://jsfiddle.net/DVKbn/

$("textarea").keydown(function(e){ 
    if(e.keyCode == 13){ 

     // assuming 'this' is textarea 

     var cursorPos = this.selectionStart; 
     var curentLine = this.value.substr(0, this.selectionStart).split("\n").pop(); 
     var indent = curentLine.match(/^\s*/)[0]; 
     var value = this.value; 
     var textBefore = value.substring(0, cursorPos); 
     var textAfter = value.substring(cursorPos, value.length); 

     e.preventDefault(); // avoid creating a new line since we do it ourself 
     this.value = textBefore + "\n" + indent + textAfter; 
     setCaretPosition(this, cursorPos + indent.length + 1); // +1 is for the \n 
    } 
}); 

function setCaretPosition(ctrl, pos) 
{ 

    if(ctrl.setSelectionRange) 
    { 
     ctrl.focus(); 
     ctrl.setSelectionRange(pos,pos); 
    } 
    else if (ctrl.createTextRange) { 
     var range = ctrl.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', pos); 
     range.moveStart('character', pos); 
     range.select(); 
    } 
} 
+0

내 요구에 적합해야합니다. 감사합니다. – JMac

+0

고마워요. 나는 이런 식으로 사방을 찾고 있었는데 나는 그것을 찾을 수 없었다. –

관련 문제