inputmask除去焦点上的小数点后的第二个零

时间:2019-04-10 21:09:33

标签: jquery jquery-inputmask

我在货币输入字段(USD)中使用input mask。我还使用dinero.js处理浮点数,这要求将整数传递给浮点数。问题是,当用户单击输入字段时,输入掩码会删除小数点后的第二个零,这会导致转换为整数时表单值错误。

这是我的输入掩码:

 $('body').on('focus', 'input.money', function(){
        $(this).inputmask("numeric", {
            radixPoint: ".",
            groupSeparator: ",",
            digits: 2,
            autoGroup: true,
            prefix: '$',
            oncleared: function () { $(this).val(''); }
        });
    });

提交表单时,我要剥离小数点,然后将其传递给我的ajax函数,如果没有小数,则要乘以100并将其传递。

因此,在上述示例中,如果输入在页面加载时预先填充了$ 100.00,然后单击它,则它变为$ 100.0。然后,如果我只是退格并输入$ 10,它将保留.0值,因此输入的值为$ 10.0。

提交表单时,这会去除小数点后的值,并且该值变成100的整数值,然后错误地将其设置为10.00美元的值。

希望这是有道理的。我计划添加表单验证,以确保在提交表单之前小数点后有2个位,但是从UX角度来看,这也困扰着我。我觉得我过去曾经使用过此插件,而且效果非常好,所以我觉得我在这里搞砸了。

总结:如果在页面加载时以$ 100.00填充值,那么当该字段成为焦点时,我希望该值保持$ 100.00,而不是更改为$ 100.0。

这是我从值中去除小数的方法。我还将它用于数据库中的值,这就是为什么我还要剔除$,的原因。

function strip(value) {
    if(value.indexOf('.') > -1) {
      return parseInt(value.replace('$','').replace(',','').replace('.','')) || 0;
    } else {
      return parseInt(value.replace('$','').replace(',','')) * 100 || 0;
    }

  }

1 个答案:

答案 0 :(得分:0)

您可以尝试使用掩码强制保留两位小数:

alias: 'decimal',
mask: "99[.99]"

听起来 dinero.js 发生了冲突。此外,对于提交,请尝试对您的值使用 unmaskedvalue 方法:

var value = $(selector).inputmask('unmaskedvalue');

或者如果您决定不使用ajax提交,您可以在data-inputmask属性中添加removeMaskOnSubmit