2

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

我可以用 . (点)但不带逗号。然后金额跳到0。

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

亲切的问候,

K。

4

2 回答 2

1

您可能不仅希望接受带有逗号的数字字段,还希望从您的 VM 中输出带有逗号作为小数点的数字。因此,您还需要实现read底层计算 observable 的 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;
};  
于 2013-09-26T12:24:41.427 回答
0

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

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

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

于 2012-11-16T13:25:19.767 回答