Javascript 可观察到的和计算出的都不能正常工作

Javascript 可观察到的和计算出的都不能正常工作,javascript,knockout.js,Javascript,Knockout.js,我有以下实现以下角色的淘汰代码: 字段1+字段2-字段3=字段4 但由于某些原因,它不能正常工作,这个原始值总是乘以10 例如: 1+1-1=10 你知道这是什么原因吗 这是我的HTML: <div class="calc-form"> <label>Original Purchase Price</label> <input type="text" id="original" data-bind="value: original"

我有以下实现以下角色的淘汰代码:

字段1+字段2-字段3=字段4

但由于某些原因,它不能正常工作,
这个原始值总是乘以10

例如:

1+1-1=10

你知道这是什么原因吗

这是我的HTML:

<div class="calc-form">
     <label>Original Purchase Price</label>
     <input type="text" id="original" data-bind="value: original" />

     <label>+ Improvements</label>
     <input type="text" id="improvements" data-bind="value: improvements" />

     <label>- Depreciation</label>
     <input type="text" id="depreciation" data-bind="value: depreciation" />

     <input type="button" class="calcbutton" value="Calculate" />
     <input type="button" class="calcbuttonreset" value="reset" />
     <p>= Total</p>
     <span data-bind="text: total"></span>
</div>

原价
+改进
-折旧
=总数


请记住,
输入
元素的值始终是一个字符串<代码>“1”+“1”-“1”
“11”-“1”
10
,因为当任一操作数是字符串时,
+
是字符串串联,而不是加法;但是
-
始终是减法运算,因此它将其操作数强制为数字

您需要通过
+x
parseFloat(x)
Number(x)
或(如果它们是整数)
parseInt(x,10)
等解析它们:

total = parseFloat(this.original())
        + parseFloat(this.improvements())
        - parseFloat(this.depreciation());
例如:

$(函数(){
应用绑定(新的AppViewModel());
});
函数AppViewModel(){
this.original=ko.可观察(0);
此改进=可观察的ko(0);
该折旧=可观测的ko(0);
this.total=ko.computed(函数(){
var合计=0;
total=parseFloat(this.original())
+parseFloat(this.improvements())
-parseFloat(this.折旧());
返回总数;
},这个);
}

原价
+改进
-折旧
=总数


一元
+
也会强制数字。另外,
numValueHandler
需要
返回
@RoyJ:我在回答中说“您需要通过
+x
或…”解析它们。不,
numValueHandler
不必返回任何内容。这两方面你都是对的。早上一定太早了。:)@T.J.Crowder工作得很好,感谢您提出了创建绑定处理程序的好主意!非常感谢@T.J.Crowder我设法添加了它,它工作得非常好,非常感谢你出色的回答!
total = parseFloat(this.original())
        + parseFloat(this.improvements())
        - parseFloat(this.depreciation());