为了更好地理解,请访问http://knockoutjs.com/documentation/extenders.html并查看实时示例 1:强制输入为数字
我可以用 . (点)但不带逗号。然后金额跳到0。
知道如何允许点和逗号吗?我想允许像 20.00 和 20,00 这样的输入
亲切的问候,
K。
为了更好地理解,请访问http://knockoutjs.com/documentation/extenders.html并查看实时示例 1:强制输入为数字
我可以用 . (点)但不带逗号。然后金额跳到0。
知道如何允许点和逗号吗?我想允许像 20.00 和 20,00 这样的输入
亲切的问候,
K。
您可能不仅希望接受带有逗号的数字字段,还希望从您的 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;
};
您可以在数字扩展器中实现一个小修复(参考您发布的扩展器文档页面)来解决这个问题。在扩展器的“write”方法中,在顶部添加以下代码:
if (typeof newValue == "string") {
newValue = newValue.replace(",", ".");
}
需要 if 语句来防止模型初始化时出错。首次创建模型时,该值很可能设置为数字而不是字符串,因此我们不能在此对象上调用 .replace 方法。