无法使用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演示