2017-10-11 11 views
0

희망 사항은 중복 질문이 아닙니다. 나는 여기와 같은 것을 찾지 못했습니다.jQuery 마스크 된 입력 선행 0을 입력하십시오.

jQuery Masked Input을 사용하여 소수점 구분 기호 (delimiter) ($)가없는 4 자리 숫자 금액을 마스크합니다. 그래서, 단지 다음과 같이 네 자리 숫자 1234 => 12.34 등 위대한 작품 $('input[id^="myMaskedInput"]').mask("?99.99");

: XX.XX

여기 내 코드의 예입니다.

1, 2 또는 3 자리 숫자를 입력 할 때 문제가 생깁니다. 예를 들어 12.30이 아니라 01.23으로 가면 123이 필요합니다. 즉, 앞에 0 또는 0이 필요합니다.

의견이 있으십니까?

미리 감사드립니다.

답변

1

하나의 해결책은 padStart()을 사용하는 것입니다 (또는 polyfill). MDN 문서에서

: 생성 된 문자열이 소정의 길이에 도달하도록 다른 문자열

padStart() 메소드 패드 현재 문자열 (필요한 경우, 반복). 패딩은 현재 문자열의 시작 부분 (왼쪽)부터 적용됩니다.

다음은 polyfill 방법을 약간 수정 한 기준입니다. 코드는 페이지로드시 찾고있는 앞에 오는 0을 추가합니다. 그러나 jQuery 마스킹으로 인해이 코드 스 니펫은 입력 할 때 값으로 0을 대체하지 않습니다.

$(document).ready(function() { 

    $('input[id^="myMaskedInput"]').val(function(index, value) { 
    return padStart(value, 4, "0"); 
    }).mask("?99.99"); 

}); 

function padStart(value, targetLength,padString) { 
    targetLength = targetLength>>0; //floor if number or convert non-number to 0; 
    padString = String(padString || ' '); 

    if (value.length > targetLength) { 
    return String(value); 
    } 
    else { 
    targetLength = targetLength-value.length; 

    if (targetLength > padString.length) { 
     padString += padString.repeat(targetLength/padString.length); //append to original to ensure we are longer than needed 
    } 

    return padString.slice(0,targetLength) + String(value); 
    } 
}