我有一系列复选框,我想收集所选的一个.复选框在div中,当div被点击时,复选框也应该被检查:
var oCheckBox = $($(this).find('.chkSocialMediaItem').get(0)); oCheckBox.attr('checked',!$(oCheckBox).attr('checked'));
这个工作很好,但是KnockoutJS没有拿起这个变化,所以不会更新我所选择的项目上的计数器.
我读到你需要触发更改事件的地方.但是当我在复选框上收听更改事件时,实际上会被触发.
任何帮助将不胜感激,
谢谢 !
更新:
我找到了一个“淘汰赛”的解决方案.
在我的div中,我做了一个数据绑定“点击”,并更改了该函数中的检查值:
<script type="text/html" id="Template"> <div class="item" data-bind="click: DivClicked"> <input type="checkBox" data-bind="checked: IsASelectedItem" class="chkSocialMediaItem"/> </div> </script> function SocialMediaSearchItem() { this.IsASelectedItem = ko.observable(); this.DivClicked = function () { this.IsASelectedItem(!this.IsASelectedItem()); }; }
这是唯一的解决方案吗?我真的很希望看到一个Jquery解决方案.
解决方法
检查的绑定仅侦听点击事件.根据实际检查值的设置,手动触发点击事件最终会使该框不同步.
设置值的首选方法是更新视图模型值,就像您在上面的第二个示例中所做的那样.
但是,如果您使用1.3beta,那么使用ko.dataFor API可以轻松地连接元素及其相应的数据.它看起来像:
var oCheckBox = $('.chkSocialMediaItem'),data = ko.dataFor(oCheckBox[0]); data.selectedItem(!data.selectedItem());