您可以创建两个输入:
- 默认情况下,输入 1 是只读且可见的,并且包含格式化的值。
- 单击输入 1 时,将其隐藏、显示并使用可编辑的实际值聚焦输入 2。
- 当输入 2 为“模糊”时,将其隐藏并显示带有格式化值的输入 1。
html:
<div>
<input type="text" readonly data-bind="value: valFormatted,
visible: !editMode(),
click: toggleEdit" />
<input type="text" data-bind="value: val,
visible: editMode,
hasFocus: editMode,
event: { blur: toggleEdit}" />
</div>
JS:
window.onload = function() {
var vm = {
val: ko.observable(),
valFormatted: ko.computed({
read: function() {
// number format
return (vm.val() || '') + '[formatted]';
},
deferEvaluation: true
}),
editMode: ko.observable(false),
toggleEdit: function() {
vm.editMode(!vm.editMode());
}
};
ko.applyBindings(vm);
};
window.onload = function() {
var vm = {
val: ko.observable(),
valFormatted: ko.computed({
read: function() {
// number format
return (vm.val() || '') + '[formatted]';
},
deferEvaluation: true
}),
editMode: ko.observable(false),
toggleEdit: function() {
vm.editMode(!vm.editMode());
}
};
ko.applyBindings(vm);
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div>
<input type="text" data-bind="value: valFormatted, visible: !editMode(), click: toggleEdit" readonly />
<input type="text" data-bind="value: val, visible: editMode, hasFocus: editMode, event: { blur: toggleEdit}" />
</div>