'Jquery 키입력시 세자리 콤마찍기'에 해당되는 글 1건

  1. 2012.01.17 [Jquery] - Input text 키 입력시 3자리 콤마 찍기(펌)

[Jquery] - Input text 키 입력시 3자리 콤마 찍기(펌)

Jquery & Mobile 2012. 1. 17. 18:24
반응형

출처 :  http://www.zemy.net/tc/zemyblue/134 

밑에서 만들었던 javascript를 jQuery의 Plugin으로 개발했다. 

기능은 동일하게 숫자의 3자리마다 자릿표시로 콤마(,)를 표시할 수 있고, 문자가 입력되면 제거한다.
jQuery의 체인연결이 가능하도록 했다. 

두개의 메소드를 구현했다. 

  • toPrice(cipher)
    • 엘리멘트의 value에서 문자열을 제거한 숫자값에 3자리수마다 콤마(,)로 구분해 금액형태로 변경하고 엘리멘트 체인을 반환한다.
    • toPrice에 cipher의 숫자를 넣으면 해당 숫자의 자릿수만큼 콤마로 자릿수를 표시한다. 값을 넣지 않으면 자동으로 3이 설정된다.
  • getOnlyNumber(data)
    • 엘리멘트의 value에서 문자를 제거한 숫자만을 반환한다.
    • data값이 있을 경우에는 선택된 엘리멘트에 data에서 문자를 제거한 숫자만의 집합을 value값으로 대입하고 해당 엘리멘트를 체인 반환한다.
    • data값이 없을 경우에는 선택된 엘리멘트의 value에서 문자를 제거한 숫자 집합을 문자열로 반환한다.

주의 : 하지만 이 plugin은 21자리의 숫자까지만 처리가능하다. 그리고 음수와 실수는 표현하지 못한다.

이 데모는 여기에서 확인해 볼 수 있다. 

다음은 plugin의 full source이다. 

(function($) {
 $.fn.toPrice = function(cipher) {
  var strb, len, revslice;
  
  strb = $(this).val().toString();
  strb = strb.replace(/,/g, '');
  strb = $(this).getOnlyNumeric();
  strb = parseInt(strb, 10);
  if(isNaN(strb))
   return $(this).val('');
   
  strb = strb.toString();
  len = strb.length;
 
  if(len < 4)
   return $(this).val(strb);
 
  if(cipher == undefined || !isNumeric(cipher))
   cipher = 3;
 
  count = len/cipher;
  slice = new Array();
 
  for(var i=0; i<count; ++i) {
   if(i*cipher >= len)
    break;
   slice[i] = strb.slice((i+1) * -cipher, len - (i*cipher));
  }
 
  revslice = slice.reverse();
  return $(this).val(revslice.join(','));
 }
 
 $.fn.getOnlyNumeric = function(data) {
  var chrTmp, strTmp;
  var len, str;
  
  if(data == undefined) {
   str = $(this).val();
  }
  else {
   str = data;
  }
 
  len = str.length;
  strTmp = '';
  
  for(var i=0; i<len; ++i) {
   chrTmp = str.charCodeAt(i);
   if((chrTmp > 47 || chrTmp <= 31) && chrTmp < 58) {
    strTmp = strTmp + String.fromCharCode(chrTmp);
   }
  }
  
  if(data == undefined)
   return strTmp;
  else 
   return $(this).val(strTmp);
 }

 var isNumeric = function(data) {
  var len, chrTmp;

  len = data.length;
  for(var i=0; i<len; ++i) {
   chrTmp = str.charCodeAt(i);
   if((chrTmp <= 47 && chrTmp > 31) || chrTmp >= 58) {
    return false;
   }
  }

  return true;
 }
})(jQuery);


이 plugin은 다음의 html 구문에서 테스트 해볼 수 있다. 

<html>
<script type="text/javascript" src="jquery.js" ></script>
<script type="text/javascript" src="jquery.money.js" ></script>
<script type="text/javascript">
$(function() { 
 $('#price').keyup(function(event) {
  $(this).toPrice();
  var strText = $(this).getOnlyNumeric();
//  var strText = getOnlyNumeric($(this).val());
  $('#number').text(strText);
 })
});
 
 
</script>
<body>
<input type="text" id="price" name="price" style="text-align: right;" /><br>
<div id="number"></div>
</body>
</html>  
반응형
: