使用最新的knockout 3.3.0和jquery 1.11.0,对JS的输入元素所做的任何更改都不会通过textInput
或value
更新绑定到该元素的可观察对象。
示例模拟代码:
HTML
<input id="test" type="text" data-bind="textInput: testObs" />
JS
$("#test").val("someVal");
示例小提琴: http://jsfiddle.net/whxj5Lf6/
是否有针对此的解决方法以便捕获此类更改?
答案 0 :(得分:5)
Knockout侦听事件以了解值已更改。具体来说,它将响应change
事件,这很容易用jQuery触发:
$("#test").val("test2").change();
http://jsfiddle.net/mbest/whxj5Lf6/2/
在与外部组件接口时,使用自定义绑定而不是内置value
或textInput
绑定通常会更好。例如,这里是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();