Knockout.js text相互依赖的输入字段
Knockout.js textInput fields dependent on each other
所以用户想买一些土豆。他可以输入以公斤为单位的土豆数量,得到以美元为单位的总价,也可以反过来输入美元,得到公斤土豆。因此有2个输入字段。
要求:值必须在键入后立即更新。在一个字段中输入值会更新另一个字段,反之亦然。公斤必须保持完整,只有一个例外——当用户自己输入的不是完整重量时。
价格以美分为单位存储在内部。价格以每1000公斤美元的价格显示给用户。以千克为单位的数量总是整数。
这是我的代码:
var ViewModel = function () {
var self = this;
this.totalPrice = ko.observable();
this.pricePerKg = ko.observable(999);
this.potatoWeight = ko.computed({
read: function () {
var totalPrice = self.totalPrice();
var potatoWeight = (totalPrice * 100) / self.pricePerKg() * 1000;
return Math.round(potatoWeight);
},
write: function (potatoWeight) {
var totalPrice = (potatoWeight * self.pricePerKg()) / 100 / 1000;
self.totalPrice(totalPrice.toFixed(2));
}
});
};
ko.applyBindings(new ViewModel());
HTML:
<label for="potato">Potato, kg</label>
<input type="text" id="potato" data-bind="textInput: potatoWeight">
<label for="priceTotal">Price total, $</label>
<input type="text" id="priceTotal" data-bind="textInput: totalPrice">
<div> Price per 1000 kilogram:
<span data-bind="text: (pricePerKg() / 100).toFixed(2)">
</span>$
Js文件:https://jsfiddle.net/9td7seyv/13/
问题:当您在"土豆重量"中键入值时,它不仅会更新美元值,还会更新它本身。由于四舍五入会导致不一致。转到上面的jsfiddle,尝试在权重字段中键入500。当你进入最后一个零点时,它会变为501。
那么,有没有一种方法可以阻止字段更新本身,或者可能需要其他方法来解决这个问题?
对于这种情况,我能想到的最直接的方法是保存用户在任何计算后输入的值的副本。。。就像下面的代码一样。
var ViewModel = function () {
var self = this;
this.totalPrice = ko.observable();
this.pricePerKg = ko.observable(999);
this.weight=ko.observable();
this.potatoWeight = ko.computed({
read: function () {
return self.weight();
},
write: function (potatoWeight) {
var totalPrice = (potatoWeight * self.pricePerKg()) / 100 / 1000;
self.totalPrice(totalPrice.toFixed(2));
self.weight(potatoWeight);
}
});
};
ko.applyBindings(new ViewModel());
https://jsfiddle.net/9td7seyv/16/
更新:对于两个值https://jsfiddle.net/9td7seyv/19/
相关文章:
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 而循环只设置php中输入字段中的第一个值
- 在输入字段中将最小金额设置为
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- 如何在HTML输入字段中添加不可删除的后缀
- 互斥单选按钮和相应的输入字段
- 在IE9中的输入字段中输入焦点最近按钮
- 选中单选框时将属性添加到输入字段
- 当设置addFromAutocompleteOnly时,剩余文本将保留在输入字段中
- 我如何在数字插入中使用逗号,这样它就不会'不要破坏我的输入字段
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 输入字段将't获取更新的值
- 如何选择多个输入字段并删除所需的属性
- 输入字段,只接受0到12之间的数字
- 单击鼠标,用MySQL数据填充html表单输入字段
- 使用jquery将输入字段转换为文本
- Model中的Typeahead返回空值以形成输入字段
- 如何从查询字符串中的输入字段发回文本
- 如何验证日期、月份和日期的3个独立输入字段;年使用jquery或javascript
- 将值传递给jquery创建的输入字段