为了更好地理解,请转到http://knockoutjs.com/documentation/extenders.html并查看实例1:强制输入为数字
我可以用a输入一个十进制值。 (点)但没有逗号。然后金额跳到0。
知道如何允许点和逗号?我想允许输入像20.00和20,00
亲切的问候,
ķ。
答案 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方法。