Knockout' textInput'和'价值'绑定不捕获JS的更改

时间:2015-07-02 21:43:41

标签: javascript jquery knockout.js

使用最新的knockout 3.3.0和jquery 1.11.0,对JS的输入元素所做的任何更改都不会通过textInputvalue更新绑定到该元素的可观察对象。

示例模拟代码:

HTML

<input id="test" type="text" data-bind="textInput: testObs" />

JS

$("#test").val("someVal");

示例小提琴: http://jsfiddle.net/whxj5Lf6/

是否有针对此的解决方法以便捕获此类更改?

2 个答案:

答案 0 :(得分:5)

Knockout侦听事件以了解值已更改。具体来说,它将响应change事件,这很容易用jQuery触发:

$("#test").val("test2").change();

http://jsfiddle.net/mbest/whxj5Lf6/2/

在与外部组件接口时,使用自定义绑定而不是内置valuetextInput绑定通常会更好。例如,这里是custom binding for use with the jQuery UI datapicker

答案 1 :(得分:1)

根据knockoutjs文档,当发生更改事件时,observable的值将更新。

  

每当用户编辑关联表单控件中的值时,KO   将更新视图模型上的属性。 KO总是会尝试   修改值和用户时更新视图模型   将焦点转移到另一个DOM节点(即,在更改事件上),但是   您还可以使用以下命令根据其他事件触发更新   valueUpdate参数

只存在一个符合问题标准的valueUpdate参数。 input参数,但根据文档有一些限制......

  

“input” - 在或的值时更新您的视图模型    元素变化。请注意,此事件仅由...引发   合理的现代浏览器(例如,IE 9 +)。

所以,我认为最好的选择是采用Michael Best提供的解决方案,手动触发change()事件,如下所示......

$("#test").val("test2").change();