Knockout.js - 强制输入为数字 - 允许使用点和逗号表示法

时间:2012-11-16 12:58:46

标签: knockout-2.0 knockout-validation

为了更好地理解,请转到http://knockoutjs.com/documentation/extenders.html并查看实例1:强制输入为数字

我可以用a输入一个十进制值。 (点)但没有逗号。然后金额跳到0。

知道如何允许点和逗号?我想允许输入像20.00和20,00

亲切的问候,

ķ。

2 个答案:

答案 0 :(得分:1)

您可能不仅希望使用逗号接受数字字段,还可以使用逗号作为小数点的输出您的VM的数字。因此,您还需要实现基础计算的observable的read getter函数。如果您不关心舍入,也可以简化write函数。这是完整的代码:

ko.extenders.numeric = function(target) {
    var result = ko.computed({
        read: function() {
            var value = target();
            return isNaN(value) || value===null || value===''
                ? value
                : value.toString().replace('.',',');
        }
        ,write: function(newValue) {
            if (typeof newValue === "string") {
                newValue = newValue.replace(",", ".");
            }
            if (newValue !== target()) {
                target(newValue);
            }
        }
    });
    result(target());
    return result;
};  

答案 1 :(得分:0)

您可以在数字扩展程序(参见您发布的扩展程序文档页面)中实现一个小修复程序来解决此问题。在扩展程序的“write”方法中,在顶部添加以下代码:

        if (typeof newValue == "string") {
            newValue = newValue.replace(",", ".");
        }

需要if语句来防止模型初始化时出错。首次创建模型时,该值很可能设置为数字而不是字符串,因此我们无法在此对象上调用.replace方法。