2013-08-19 3 views
2

HTML/JavaScript로 터미널 창을 만들고 입력 용 텍스트 영역을 사용하고 있습니다. 텍스트 영역의 텍스트 섹션이 삭제되지 않도록하고 싶습니다. 예를 들어, "C : \> Random Code"텍스트 영역에 텍스트가있는 경우 사용자가 "C : \>"텍스트를 삭제하지 못하도록하고 싶습니다. 자바 스크립트를 사용하여 가능합니까?HTML 텍스트 영역에서 일부 텍스트가 삭제되지 않습니다.

+1

어쩌면 당신은 콘텐츠의 길이를 확인하기 위해 textarea의 onchange 이벤트를 사용할 수 있습니다. 그 다음에 콘텐트가 더 작고 콘텐트가 "C :>"로 시작한다면 당신은 문자열을 대체합니까 ??? – Sebastien

답변

3

텍스트 영역의 섹션을 편집 할 수 없게 만들 수 없습니다 (전체 컨트롤 만). 당신은 다양한 자바 스크립트 속임수를 사용할 수 있습니다

(키 누르기 이벤트를 듣고 사용자가 허용 할 않는 무언가를하고자하는 경우에서는 event.preventDefault를 사용하여 이벤트를 취소)

또 다른 해결책은 대신있는의에있다 사용자 입력에 미리 정의 된 문자열을 자동으로 추가 (또는 앞에 붙이기)하고 (어떤 방식 으로든 사용자를 위해 자주 표시)

업데이트 :

그래서, 내 솔루션은 다음과 같을 것이다 :

에는 텍스트 범위를 선택하지 않은 경우 GetSelectionStart 선택한 텍스트 (또는 캐럿 위치의 시작을 알려주는 기능이다
var requiredText = 'C:>'; 
$('textarea').on('keyup',function(event) { 
    if (GetSelectionStart(this) < requiredText.length){ 
event.preventDefault(); 
event.stopPropagation(); 
} 

} 

). 가능한 구현에 대해서는 e. 지. Caret position in textarea, in characters from the start

이 함수는 requiredText가 항상 문자열의 시작 부분에 있다고 가정합니다. 물론 더 복잡한 시나리오에도 적용 할 수 있습니다. 거기에 바로 다시 자신을 추가합니다 : (사용자가 삭제하려고 즉) : jQuery를 가정

2

,이 스크립트는 키 입력을 수신하며, 필요한 텍스트 중 하나를 찾을 수없는 경우

var requiredText = 'C:>'; 
$('textarea').on('input',function() { 
    if (String($(this).val()).indexOf(requiredText) == -1) { 
     $(this).val(requiredText); 
    } 
} 
+0

와우 아주 좋습니다! 나는 결코 이런 식으로 indexOf를 사용할 수 없었다! 이것은 시원하고 유용합니다. 감사! – Sebastien

+0

이 코드는 requiredText가 입력 텍스트에 있는지 만 확인합니다. 그러나, 1.) 텍스트는 requiredText로 시작한다. (이 경우 필요하다.) 2.) 사용자 입력을 파기 할 수있다. e. 지. "C :> somefolder/somefile.txt"는 입력 값입니다. 사용자가 ":>"=> 텍스트 영역의 새 값을 "C :>"로 삭제합니다. 사용자의 관점에서 볼 때 이것은 정말 실망 스러울 수 있습니다. –

관련 문제