为了更好的理解,请去http://knockoutjs.com/documentation/extenders.html和看看活生生的例子1:强制输入是数字Knockout.js - 强制输入是数字 - 允许点和逗号符号
我可以输入一个十进制值与。 (点),但不包含逗号。然后金额跳到0.
任何想法如何我可以允许点和逗号?我想,让输入像20.00和20.00
亲切的问候,
K.
为了更好的理解,请去http://knockoutjs.com/documentation/extenders.html和看看活生生的例子1:强制输入是数字Knockout.js - 强制输入是数字 - 允许点和逗号符号
我可以输入一个十进制值与。 (点),但不包含逗号。然后金额跳到0.
任何想法如何我可以允许点和逗号?我想,让输入像20.00和20.00
亲切的问候,
K.
您可以实现在数字扩展一个小的修复(参考,您张贴的扩展文档页面)解决这个问题。在延长的“写”的方法,加上顶部以下代码:需要
if (typeof newValue == "string") {
newValue = newValue.replace(",", ".");
}
if语句,以防止模型初始化错误。首次创建模型时,该值很可能设置为数字而不是字符串,因此我们无法在此对象上调用.replace方法。
你可能不仅要接受数字字段用逗号,也输出人数从你的VM逗号为小数点。因此,您还需要实现基础计算observable的getter函数read
。如果你不关心四舍五入,还可以简化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;
};