2016-09-05 2 views
2

양식과 텍스트 영역이 있습니다. x 초 후에 자동으로 양식을 제출합니다 ...하지만 자동 제출이 완료되면 커서가 텍스트 영역 밖으로 점프합니다 ... 그래서 이전 위치에서 제출 한 후 커서를 유지할 수 있습니까? 텍 사레 아에?자동 제출 후 커서를 텍스트 영역의 위치에 유지할 수 있습니까?

+0

은별로 말할 수 없습니다. 하나. 제출 후'.focus()'를 텍스트 영역에 넣으려고 할 수있다. –

+0

작동하지만 마우스를 한 번 클릭하면 쓸 수 있습니다 ... 마우스를 한 번 클릭하지 않고도 아무 것도 쓰지 않으면 커서가 mouse @ telex-wap에서 한 번 클릭하지 않고 textarea에 표시되지 않기 때문에 – code

답변

2

에서 코드를 제출하면 textarea에 커서의 현재 위치가 표시됩니다. 당신은 (idtextarea 요소의 id 속성이다)이 기능을 수행 할 수 있습니다 (예를 들어 localstorage에) 어딘가에 값을 저장보다

function getCaretPosition(id) { 
    var txt = document.getElementById(id); 
    var startPos = txt.selectionStart; 
    var endPos = txt.selectionEnd; 
    return endPos; 
} 

는, 양식 이후에 커서 위치를 복원 제출 이 기능 : caretPos를 제출하기 전에 저장된 커서 위치입니다

function setCaretPosition(id) { 
    var txt = document.getElementById(id); 
    if(txt.createTextRange) { 
     var range = txt.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', caretPos); 
     range.moveStart('character', caretPos); 
     range.select(); 
     return; 
    } 

    if(txt.selectionStart) { 
     txt.focus(); 
     txt.setSelectionRange(caretPos, caretPos); 
    } 
} 

. 여기에 간단한 동작 데모가 있습니다. 코드를 보지 않고도 https://jsfiddle.net/p0oc8tjs/2/

+0

도움을 주셔서 감사합니다. 답변이 유용합니다. @xxxmatko – code

+0

안녕하세요. 기꺼이 도와주세요. – xxxmatko

2

autofocus 텍스트 영역 특성을 사용하십시오. 예 :

<textarea autofocus></textarea> 

이 부울 속성을 사용하면 폼 컨트롤이 가 입력 포커스를 가져야한다고 지정할 수 있습니다 페이지가로드 될 때, 사용자가 다른 컨트롤에 입력하여, 예를 들어 을 무시하지 않는 한. 하나의 양식 연관 요소 하나만이이 속성을 지정할 수 있습니다. 당신은 여전히 ​​sessionStorage을 사용하는 것보다, 마지막 커서 위치를 스크립트를 사용하여 설정하려면

당신은 할 수 있습니다 :

:이 게시물에 대한 답변을

$.fn.getCursorPosition = function() { 
 
    var el = $(this).get(0); 
 
    var pos = 0; 
 
    if('selectionStart' in el) { 
 
     pos = el.selectionStart; 
 
    } else if('selection' in document) { 
 
     el.focus(); 
 
     var Sel = document.selection.createRange(); 
 
     var SelLength = document.selection.createRange().text.length; 
 
     Sel.moveStart('character', -el.value.length); 
 
     pos = Sel.text.length - SelLength; 
 
    } 
 
    return pos; 
 
}; 
 
$.fn.selectRange = function(start, end) { 
 
    if(end === undefined) { 
 
     end = start; 
 
    }; 
 
    return this.each(function() { 
 
     if('selectionStart' in this) { 
 
      this.selectionStart = start; 
 
      this.selectionEnd = end; 
 
     } else if(this.setSelectionRange) { 
 
      this.setSelectionRange(start, end); 
 
     } else if(this.createTextRange) { 
 
      var range = this.createTextRange(); 
 
      range.collapse(true); 
 
      range.moveEnd('character', end); 
 
      range.moveStart('character', start); 
 
      range.select(); 
 
     } 
 
    }); 
 
}; 
 
var textarea = $('.remember-cursor'); 
 
textarea.on('input click keyup', function(e) { 
 
\t sessionStorage.cursorPosition = textarea.getCursorPosition(); 
 
}); 
 
$(document).on('ready', function(e) { 
 
    textarea.focus().selectRange(sessionStorage.cursorPosition); 
 
}); 
 
$('button').on('click', function(e) { 
 
\t $(document).trigger('ready'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea class="remember-cursor">adsfsadfsad</textarea> 
 
<button>Trigger DOM ready</button>

감사합니다

또한 JSFiddle에있다.

여전히 이 올바른 방법입니다. AJAX를 통해 데이터를 게시하고 결과를 수집해야합니다.

+0

작동하지만 넣으면됩니다. 제출 후 텍스트 영역의 시작 부분에있는 텍스트 영역 – code

+0

제출 후 이전 위치에 커서를 유지하고 싶습니다. 텍스트 영역 시작 부분에 넣지 않으려합니다. – code

+0

가장 좋은 방법은 AJAX를 통해 데이터를 제출하고 결과를 표시하는 것입니다. 데이터가 변경되지 않은 경우 아무 것도 제출할 필요가 없으므로 자원을 보유하게됩니다.텍스트 영역에 집중하고 텍스트 끝 (또는 특정 위치)으로 커서를 이동하려면 스크립트를 사용하는 것 외에 다른 방법이 없습니다. – skobaljic

관련 문제