我在货币输入字段(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;
}
}
答案 0 :(得分:0)
您可以尝试使用掩码强制保留两位小数:
alias: 'decimal',
mask: "99[.99]"
听起来 dinero.js 发生了冲突。此外,对于提交,请尝试对您的值使用 unmaskedvalue 方法:
var value = $(selector).inputmask('unmaskedvalue');
或者如果您决定不使用ajax提交,您可以在data-inputmask属性中添加removeMaskOnSubmit。