javascript - Knockout computed gives Function expected error in IE only -
i'm getting "script5002: function expected" happens in ie. i'm testing against version 9. happens when use defined computed observable inside of computed observable.
my application bit more complex this, i've reproduced error simpler code below. error happens on line z = self.subtotal(); when enter number in number 1, number 2, , number 3 (and tab out).
this error not occur in chrome or firefox , i've googled quite while. can un-stick me.
here link jsfiddle: http://jsfiddle.net/kcmtg/
here 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()); }); here 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" />
this has similar cause one: knockout.js computed observable called twice in internet explorer , caused fact in ie<10, knockout has special code deal getting autocomplete value field. if field read-only in case. check, however, autocomplete attribute. fix this:
<input id="subtotal" type="text" data-bind="value: subtotal" autocomplete="off" readonly="readonly" /> there bug in knockout @ play here--that overwrite computed observable passed two-way binding. fixed in development version of knockout released version 2.3.0 (probably in april 2013). work around this, can pass value of observable binding instead of computed observable itself, this:
<input id="subtotal" type="text" data-bind="value: subtotal()" readonly="readonly" />
Comments
Post a Comment