无法使用jQuery触发Knockout数据绑定

我正在使用jQuery和knockout编写插件。 我有两个单选按钮。 我正在使用knockout data-bind检查并取消选中单选按钮。 问题是,当我尝试使用jQuery单击另一个按钮取消选中单选按钮时,它不会更新bind observable属性。

 Fixed Price  Allow Biding 

var onClick = function() { $('.hn').prop('checked', true); }; $('#button').click(onClick); var ViewModel = function () { var self = this; self.selectedVal = ko.observable("fixedPrice"); self.selectedVal.subscribe(function (val) { console.log(val) }); }; ko.applyBindings(new ViewModel());

请在下面找到这个jsfiddle更多细节。

jQuery和Knockout正在争夺对视图的控制权。 如果您要使用viewmodel,请使用viewmodel并且不要通过viewmodel操作DOM。 你有一个控制单选按钮的viewmodel元素,你只需要设置它。 Knockout提供了一个click绑定,所以你也不需要jQuery来附加它。

 var ViewModel = function () { var self = this; self.selectedVal = ko.observable("fixedPrice"); self.selectedVal.subscribe(function (val) { console.log(val) }); self.setSelected = function () { self.selectedVal('allowBiding'); }; }; ko.applyBindings(new ViewModel()); 
  Fixed Price Allow Biding 

韦尔普! 不要以这种方式混合KO和jQuery。 你正在 Knockout 战斗 ,而不是使用它。 看到我之前为非常类似的情况和扩展解释写的答案 。

请注意,这肯定不是一个错误,jQuery默认情况下不会触发DOM更改的事件。 如果你坚持以这种方式混合KO和jQuery,请务必通知其他人:

 ko.applyBindings({ isChecked: ko.observable(false), onClick: function() { $('.hn').prop('checked', true); $('.hn').trigger('click'); } }); 
   1. The radio button:  
2. Trigger it with jQuery:
Debug info:

它看起来像一个bug。 但是,您可以尝试调用本机单击处理程序,以便更新observable。

 $('.hn').triggerHandler('click'); 

要么

 $('.hn')[0].click(); 

这是一个JsFiddle演示