2013-08-24 2 views
0

브라우저 간 은 무엇입니까? 일반 자바 스크립트를 사용하여 텍스트 영역에 최대 글자 수를 설정하는 방법은 무엇입니까? maxlength은 Opera 및 IE9 이하의 텍스트 영역에서는 작동하지 않습니다 (모든 주요 브라우저에서 입력 내용을 처리 할 수 ​​있음).<textarea> 글자 수 제한

한도에 도달하면 텍스트 영역에 더 많은 문자를 입력 할 수 없습니다. Ctrl + V 또는 오른쪽 클릭 컨텍스트 메뉴로 붙여 넣은 텍스트는 글자 수 제한에서 잘려야합니다. 즉, onkey___ 이벤트 만 사용하는 솔루션으로는 충분하지 않습니다.

+0

[목에서 다르게 부착해야 할 수도 있습니다 에서 귀하의 질문에 대답 할 수 있습니다] (http://stackoverflow.com/questions/451491/what-is-the-best-way-to-emulate-an-html-input-maxlength-attribute-on-an-html-t) – aldanux

답변

2

을 절단하거나 조건에서 이벤트을 방지하고 관심있는 모든 이벤트에 대해 여러 수신기로 추가됩니다 중 하나 기능를 생성합니다.

function snip(len) { 
    return function (e) {e.target.value = e.target.value.slice(0, len);}; 
} 
function prevent(len) { 
    return function() { 
     if (e.target.value.length >= len) { 
      e.preventDefault(); 
      return false; 
     } 
    }; 
} 

var len = 5; // choose your length however you want 

var textarea = document.getElementById('texta'), // get the node 
    trunc = snip(len), 
    prev1 = prevent(len), 
    prev2 = prevent(len - 1); 

textarea.addEventListener('change' , trunc, true); 
textarea.addEventListener('input' , trunc, true); 
textarea.addEventListener('keydown' , prev2, true); 
textarea.addEventListener('keypress', prev2, true); 
textarea.addEventListener('keyup' , prev1, true); 
textarea.addEventListener('paste' , trunc, true); 

이벤트는 IE

DEMO

+0

'value = value'를 설정해도 변경/입력 이벤트가 발생하지 않기 때문에 무한 루프가 발생하지 않는다는 점을 지적 하겠지만 다른 변경 작업을 수행하는 경우주의해야합니다. . –

+0

좋은 답변입니다! 그러나 이렇게하면 최대 길이에 도달 한 후 입력을 방지하는 대신 끝에 텍스트를 지 웁니다. 제대로 작동하도록하기보다는 오히려'maxlength'로 갈 것입니다. Opera와 IE9 지원이 필요한 사용자는 누구입니까? :피 –

관련 문제