jQuery Masked输入前导零(s)

时间:2017-10-11 15:48:01

标签: jquery jquery-plugins

希望这不是一个重复的问题;我没有找到类似的东西,所以这里有:

我使用jQuery Masked Input使用小数分隔符屏蔽了四位数的美元金额但没有分隔符($)。所以,就像这样:xx.xx

这是我的代码示例:$('input[id^="myMaskedInput"]').mask("?99.99");

这适用于四位数字1234 => 12.34等等。

我的问题是当我输入一位,两位或三位数时。例如,我需要123屏蔽到01.23,而不是12.30。即,我需要一个前导零或零。

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用(或使用polyfill)padStart()

来自MDN文档:

  

padStart()方法用另一个字符串填充当前字符串(如果需要,重复),以便生成的字符串达到给定的长度。填充从当前字符串的开头(左侧)开始应用。

以下是使用对polyfill方法进行微小修改的标准示例。代码将在页面加载时添加您要查找的前导零。但是,由于jQuery屏蔽的方式,此代码段不会在您键入时用值替换零。

$(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);
  }
}