필드를 비활성화하지 않고 사용자가 텍스트 필드에 입력하는 것을 방지하는 방법은 무엇입니까?


80

나는 시도했다 :

$('input').keyup(function() {

   $(this).attr('val', '');

});

그러나 문자를 입력 한 후 입력 된 텍스트를 약간 제거합니다. 어쨌든 사용자가 텍스트 필드를 비활성화하지 않고 텍스트를 완전히 입력하지 못하게 할 수 있습니까?


이다 keydown()또는 keypress()어떤이 더 효과적?
판매

답변:


189

쉽게 간과 될 수있는 비 자바 스크립트 대안 : readonly대신 속성 을 사용할 수 있습니까?disabled 있습니까? 입력의 텍스트를 편집하는 것을 방지하지만 브라우저는 입력의 스타일을 다르게 지정합니다 ( "회색으로 표시"할 가능성이 낮음).<input readonly type="text" ...>


4
솔직히 이것이 최선의 해결책이라고 말하고 싶습니다.
Christian Mann

3
readonly 속성에는 값이 없으며 HTML 4.01HTML5 모두에 있어야합니다 . 값이 필요한 유일한 시간은 유효한 XHTML 문서 (웹에서는 매우 드뭅니다)입니다.
RobG

정확히 RobG가 맞습니다. 말씀 드렸어야 했어요. 또한이 속성은 textarea 요소에 대해 작동해야하며 체크 박스 / 라디오 입력에도 작동한다고 생각합니다.
Mike Mertsock 2011-08-05

4
이 방법에는 한 가지 단점이 있습니다. 사용자는 여전히 필드를 클릭하여 편집 가능한 것처럼 표시 할 수 있습니다. 백 스페이스를 눌러 거기에있는 내용을 제거하면 브라우저의 "뒤로"기능이 트리거 될 수 있습니다. 좋은 경험이 아닙니다.
caltrop 2013 년

1
사용자 경험에 대한 우려가 있거나 읽기 전용 필드의 기본 스타일이 추악한 경우 점진적 향상 접근 방식을 취하고 CSS를 사용하여 편집 할 수 없음을 더 분명하게 만듭니다. jsfiddle.net/eBh5N
Mike Mertsock

64

필드가 "비활성화 됨"또는 약간만 보이게하지 않으려면 다음을 사용하십시오.

onkeydown="return false;"

기본적으로 greengit과 Derek이 말한 것과 동일하지만 조금 더 짧습니다.


나는에 있었다 e.preventDefault();또는 addEventListener
짐 존스

3
더 짧은 :onkeydown="return false"
CoderPi

4
이것은 사용자가 마우스로 텍스트를 붙여 넣는 것을 방해하지 않는다는 점에 유의하십시오.
gsanta 16.04.16

2
예를 들어 날짜 선택기를 사용할 때 사용자가 날짜를 입력하지 못하도록 방지하고 실제로 날짜 선택기를 사용하는 경우에 적합합니다. 그러나 @gsanta가 말했듯이 텍스트를 붙여 넣을 수 있으므로 백엔드 유효성 검사도 확인하십시오. :)
MattiasH

1
ASP.NET 웹 사이트에서 텍스트 상자를 읽기 전용으로 설정하면 포스트 백에서 텍스트가 손실됩니다. 이러한 경우 이것이 더 나은 솔루션입니다.
Yass

30
$('input').keydown(function(e) {
   e.preventDefault();
   return false;
});

2
사실 저는 생년월일 필드가 있고 사용자가 입력하는 것을 막고 싶습니다. 그래서 당신의 대답은 GOOD입니다 !! "readonly"속성을 사용하면 사용자가 입력을 클릭 할 수없고 입력을 클릭하여 나오는 DOB 팝업이 표시됩니다 .. :) 건배 !!!! 그리고 감사합니다
Neeraj Singh 2014

16
$('input').keypress(function(e) {
    e.preventDefault();
});

2
이렇게하면 입력 만 방지 할 수 있지만 화살표 키 등은 계속 사용할 수 있습니다. 감사합니다!
CoderPi

7

사용자가 아무것도 추가하지 못하도록하고 문자를 지울 수있는 기능을 제공 하려는 경우 :

<input value="CAN'T ADD TO THIS" maxlength="0" />

maxlength입력 의 속성을로 설정하면 "0"사용자가 콘텐츠를 추가 할 수 없지만 원하는대로 콘텐츠를 지울 수 있습니다 .


그러나 진정으로 일정하고 변경할 수 없도록하려면 :

<input value="THIS IS READONLY" onkeydown="return false" />

onkeydown속성을로 설정하면 return false입력이 사용자 keypresses를 무시 하도록하여 값이 변경되거나 영향을받지 않도록합니다.


2

필요에 따라 사용할 수있는 또 하나의 방법 $('input').onfocus(function(){this.blur()}); 은 이것이 작성하는 방법이라고 생각합니다. 나는 jquery에 능숙하지 않습니다.


1

마크 업

<asp:TextBox ID="txtDateOfBirth" runat="server" onkeydown="javascript:preventInput(event);" onpaste="return false;"
                                TabIndex="1">

스크립트

function preventInput(evnt) {
//Checked In IE9,Chrome,FireFox
if (evnt.which != 9) evnt.preventDefault();}

이렇게하면 DatePicker Filed에서 탭 기능을 구현하고 편집을 방지하는 데 도움이됩니다.
비주 kalanjoor

1

추가가 불가능한 D3와 같은 동적 자바 스크립트 DOM 생성과 함께 작동하는 것을 추가하고 싶습니다.

//.attr(function(){if(condition){"readonly"]else{""}) //INCORRECT CODE !

HTML 입력 DOM 요소에 대한 작업을 방지하려면 클래스에 읽기 전용을 추가합니다.

var d = document.getElementById("div1");
d.className += " readonly";

또는 D3에서 :

 .classed("readonly", function(){
   if(condition){return true}else{return false}
 })

그리고 CSS 이하에 추가 :

.readonly {
  pointer-events: none;
}

이 솔루션의 좋은 점은 생성시 D3에 통합 할 수 있도록 함수에서 동적으로 켜고 끌 수 있다는 것입니다 (단일 "readonly"속성으로는 불가능).

클래스에서 요소를 제거하려면 :

document.getElementById("MyID").className =
  document.getElementById("MyID").className.replace(/\breadonly\b/,'');

또는 Jquery를 사용하십시오.

$( "div" ).removeClass( "readonly" )

또는 수업 전환 :

$( "div" ).toggleClass( "readonly", addOrRemove );

완전하게, 행운을 빕니다 = ^)


1

아래와 같이 컨트롤 태그에 onkeydown = "return false"를 사용하면 사용자로부터 값을받지 않습니다.

    <asp:TextBox ID="txtDate" runat="server" AutoPostBack="True"
ontextchanged="txtDate_TextChanged" onkeydown="return false" >
    </asp:TextBox>

0

한 가지 옵션은 핸들러를 input이벤트 에 바인딩하는 것 입니다.

이 접근 방식의 장점은 사용자가 기대하는 키보드 동작 (예 : 탭, 페이지 위로 / 아래로 등)을 방지하지 않는다는 것입니다.

또 다른 장점은 컨텍스트 메뉴를 통해 텍스트를 붙여 넣어 입력 값이 변경된 경우에도 처리한다는 것입니다.

이 접근 방식은 입력을 비워 두는 데에만 관심이있을 때 가장 잘 작동합니다. 특정 값을 유지하려면 input이벤트가 수신 될 때 사용할 수 없기 때문에 다른 곳 (데이터 속성에서?)에서 추적해야 합니다.

const inputEl = document.querySelector('input');

inputEl.addEventListener('input', (event) => {
  event.target.value = '';
});
<input type="text" />

Safari 10, Firefox 49, Chrome 54, IE 11에서 테스트되었습니다.


0

CSS 전용 솔루션의 pointer-events: none경우 입력 설정 을 시도 하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.