我得到一個「SCRIPT5002:函數預期」,只發生在IE中。我目前正在對版本9進行測試。它發生在我使用另一個計算的observable內的先前定義的計算可觀察值時。Knockout計算給出了函數在IE中的預期錯誤
我的應用程序比這個更復雜一點,所以我用下面更簡單的代碼重現了錯誤。輸入號碼1,號碼2和號碼3(和製表符)時,錯誤發生在線路z = self.subtotal();
上。
這個錯誤在Chrome或Firefox中不會發生,我已經搜索了很長一段時間。希望有人能幫助解開我。
這裏是鏈接到的jsfiddle:http://jsfiddle.net/kCmTg/
這裏是JavaScript:
function putVars() {
self = this;
self.number1 = ko.observable();
self.number2 = ko.observable();
self.subtotal = ko.computed(function() {
return parseFloat(self.number1()) + parseFloat(self.number2());
}, self, { deferEvaluation: true });
self.number3 = ko.observable();
self.number4 = ko.observable();
self.total = ko.computed(function() {
var x, y, z;
x = self.number3();
y = self.number4();
z = self.subtotal();
return parseFloat(x) + parseFloat(y) + parseFloat(z);
}, self, { deferEvaluation: true });
}
$(function() {
ko.applyBindings(new putVars());
});
下面是HTML:
<h4>Calc 1</h4>
<label for="Number1">Number 1: </label><input id="Number1" type="text" data-bind="value: number1" />
<label for="Number2">Number 2: </label><input id="Number2" type="text" data-bind="value: number2" />
<label for="Subtotal"><b>Subtotal: </b></label><input id="Subtotal" type="text" data-bind="value: subtotal" readonly="readonly" />
<hr />
<h4>Calc 2</h4>
<label for="Number3">Number 3: </label><input id="Number3" type="text" data-bind="value: number3" />
<label for="Number4">Number 4: </label><input id="Number4" type="text" data-bind="value: number4" />
<label for="Total"><b>Total:</b> </label><input id="Total" type="text" readonly="readonly" data-bind="value: total" />
感謝您對問題的更加清晰和更簡潔的解決方法。在看到這個選項之前,我已經實施了猶大的解決方案,並將其留給了與本次討論無關的其他原因。我相信這是更準確的答案。 – EJDev 2013-03-04 15:24:06
有類似的問題,並能通過使用第二個修復程序來修復它,將'()'放在'data-bind'中的值上。偉大的工作發現。 – vapcguy 2015-03-20 06:52:56