인터넷정보

입력 글자바이트 제한 textarea,textbox용

알 수 없는 사용자 2007. 10. 11. 11:16

<SCRIPT>
//================================================================
// 문자열 바이트 알아내기
//================================================================
function cm_get_byte(str) { //문자열의 byte 길이를 알아냄(한글 2byte로 처리)
    var i,m=str.length, re_count=0,val = 0;;
    for(i=0;i<m;i++) {
        val = escape(str.charAt(i)).length;
        if(val>3) re_count++;
        re_count++;
    } return re_count;
}
function cm_get_byte_length(str,limit_byte){ //지정된 바이트 길이만큼의 length를 반환, 홀수로 짤리면 -1의 길이반환
    var i,m=str.length, re_count=0,val = 0;;
 var len_count = 0;
    for(i=0;re_count<limit_byte ;i++) {
        val = escape(str.charAt(i)).length;
  len_count++;
        if(val>3) re_count++;
        re_count++;
    }
 if(re_count%2 == 1)  return (len_count-1);
 else  return (len_count);
}
//================================================================
// 입력 글자바이트 제한 (필수 : 문자열 바이트 알아내기)
//  textarea에 사용
//================================================================
function input_textarea_limit_byte(ta,limit){
 var layout = document.createElement('table');
// layout.border='2';
 layout.style.padding='0px';
 layout.style.margin='0px';
 if(ta &&ta.style && ta.style.width){
  layout.style.width=ta.style.width
 }
 layout.border="0";
 layout.cellspacing="0";
 layout.cellpadding="0";
 var tr1 = layout.insertRow(-1);
 var td1 = tr1.insertCell(-1);
 td1.style.padding='0px';
 td1.style.textAlign='right';
 var tr2 = layout.insertRow(-1);
 var td2 = tr2.insertCell(-1);
 td2.style.padding='0px';
 td2.style.textAlign='right';
 
 var txt_limit = document.createElement('input');
 txt_limit.type='text';
 txt_limit.style.borderStyle='none';
 txt_limit.style.textAlign='right';
 txt_limit.style.fontSize='10px';
 txt_limit.style.width='40px';
 txt_limit.readOnly=true;
 txt_limit.value=0;
 var span_text1 = document.createElement('span');
 span_text1.innerHTML='Limit : ';
 var span_text2 = document.createElement('span');
 if(limit){
  span_text2.innerHTML=' byte /'+limit+' byte';
 }else{
  span_text2.innerHTML=' byte ';
 }
 var div_title = document.createElement('div');
 div_title.style.fontSize='10px';
 div_title.appendChild(span_text1);
 div_title.appendChild(txt_limit);
 div_title.appendChild(span_text2);
if(ta.tagName.toString().toLowerCase()=='textarea'){ //textarea일 경우만

 if(!ta.rows){ta.rows="3";}
 var btn_0 = document.createElement('input');
 btn_0.type='button';
 btn_0.value='■';
 btn_0.style.fontSize="10px";
 btn_0.style.width="18px";
 btn_0.style.height="18px";
 btn_0.style.borderWidth="1px";
 btn_0.onclick=function(){
  this.blur();
  ta.rows='3';
 }
 var btn_p = btn_0.cloneNode(true);
 btn_p.value='▼';
 btn_p.onclick=function(){
  this.blur();  
  ta.rows=parseInt(ta.rows)+2;
 }
 div_title.appendChild(btn_0);
 div_title.appendChild(btn_p);
 }
 
 ta.parentNode.insertBefore(layout,ta);
 td1.appendChild(div_title);
 td2.appendChild(ta);
 ta.onkeyup=function(){
  txt_limit.value= cm_get_byte(this.value)
  if(limit && txt_limit.value>limit){
   alert!!('Max Byte = '+limit);
   this.value = this.value.toString().substr(0,cm_get_byte_length(this.value,limit));
   txt_limit.value= cm_get_byte(this.value)
  }
 }

 //처음 처리
  txt_limit.value= cm_get_byte(ta.value)
 if(limit && txt_limit.value>limit){
  ta.value = ta.value.toString().substr(0,cm_get_byte_length(ta.value,limit));
 }
  txt_limit.value= cm_get_byte(ta.value)
}
</SCRIPT>

<HR>
 <TEXTAREA id=test_textarea1 name=test_textarea1 rows=10 cols=50>"공대여자는 이쁘다."를 나타내야 쓸 수 있습니다.</TEXTAREA>
<SCRIPT type=text/javascript>
input_textarea_limit_byte(document.getElementById('test_textarea1'),1000);
</SCRIPT>

<HR>
 <INPUT id=test_textarea2 size=50 value="'공대여자는 이쁘다.'를 나타내야 쓸 수 있습니다.'공대여자는 이쁘다.'를 나타내야 쓸 수 있습니다.'공대여자는 이쁘다.'를 나타내야 쓸 수 있습니다." name=test_textarea2>
<SCRIPT type=text/javascript>
input_textarea_limit_byte(document.getElementById('test_textarea2'),50);
</SCRIPT>

<HR>
<TEXTAREA id=test_textarea3 name=test_textarea3 rows=10 cols=50>"공대여자는 이쁘다."를 나타내야 쓸 수 있습니다.</TEXTAREA>
<SCRIPT type=text/javascript>
input_textarea_limit_byte(document.getElementById('test_textarea3'));
</SCRIPT>

반응형