쓸만한 주저리

숫자값만 입력 받아서 자리표시하기

봄돌73 2008. 10. 17. 10:42

아래 소스에서 〈는 특수문자이다.


〈!-- 불여우에서는 event를 자동으로 넘겨주지 않는다. -->
〈!-- http://phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_html&wr_id=135379&sca=&sfl=wr_subject||wr_content&stx=keypress&sop=and 참조 -->
〈!-- 숫자 키만 입력 받는다. 한글 입력은 스타일로 막는다. -->
〈!-- http://dayweb.tistory.com/28?srchid=BR1http%3A%2F%2Fdayweb.tistory.com%2F28 참조 -->
〈input id=commastring type=text style=ime-mode:disabled onkeydown=checkkey(event,this.value) onblur=addcomma(this.value)>
〈span id=bugspan>〈/span>

〈script>
  function checkkey(e,str){
    document.getElementById('bugspan').innerHTML=e.keyCode
    //숫자와 마침표, 쉼표, 백스페이스만 허용
    if((e.keyCode〈48 || (e.keyCode>57 && e.keyCode〈96) || e.keyCode>105) && e.keyCode!=8 && e.keyCode!=188 && e.keyCode!=190){
      //window.event가 참이면 ie, 아니면 불여우로 판단해서 각각의 방식으로 쓴다. 공통된 방법은 못 찾았다.
      //http://forums.mozilla.or.kr/viewtopic.php?f=9&t=3380 참조
      if(window.event){
        e.returnValue=false
      }
      else{
        e.preventDefault()
      }
    }

    //두 번째 마침표가 들어오면 무시한다.
    else if(str.indexOf('.')>-1 && e.keyCode==190){
      if(window.event){
        e.returnValue=false
      }
      else{
        e.preventDefault()
      }
    }
  }

  function addcomma(str){
    var integer_string='',comma_string='',float_string=''
    //마침표가 있으면 마침표로 분할해서 왼쪽 문자열만 쉼표를 찍는다.
    if(str.indexOf('.')>0){
      //마침표 왼쪽 문자열에서 쉼표를 제거한다.
      //http://roresy.tistory.com/427?srchid=BR1http%3A%2F%2Froresy.tistory.com%2F427 참조
      integer_string=str.split('.')[0].replace(/,/gi,'')
      float_string='.'+str.split('.')[1].replace(/,/gi,'')
    }
    else{
      integer_string=str
    }

    if(integer_string.indexOf(',')==-1 && integer_string.length>3){
      for(var i=3;i〈integer_string.length+3;){
        if(comma_string.length>0){
          comma_string=integer_string.substr(integer_string.length-i,3)+','+comma_string
        }
        else{
          comma_string=integer_string.substr(integer_string.length-i,3)
        }
        integer_string=integer_string.substr(0,integer_string.length-i)
      }
      document.getElementById('commastring').value=comma_string+float_string
      document.getElementById('bugspan').innerHTML=''
    }
    else{
      if(str.length>3){
        document.getElementById('bugspan').innerHTML='오류가 발생하였습니다.'
      }
    }

  }
〈/script>