jquery - 使用 Jquery 更改值时 KnockoutJS 属性不会更新

标签 jquery knockout.js

我有一系列复选框,我想收集选定的一个。复选框位于 div 中,当单击 div 时,复选框也应该被选中:

var oCheckBox = $($(this).find('.chkSocialMediaItem').get(0));
oCheckBox.attr('checked', !$(oCheckBox).attr('checked'));

这工作得很好,但 KnockoutJS 不会接受更改,因此不会更新我对所选项目的计数器。

我在某处读到您需要触发更改事件。但是当我监听复选框上的更改事件时,它实际上会被触发。

如有任何帮助,我们将不胜感激, 谢谢!

更新:

我找到了“knockout ”解决方案。 在我的 div 中,我对“点击”进行了数据绑定(bind),并更改了该函数中的选中值:

<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());
            };
}

这是唯一的解决方案吗?我真的很希望 2 也能看到 Jquery 解决方案。

最佳答案

我遇到了同样的问题...虽然我确实找到了一个适合我的解决方案,但与 @RP Niemeyer 发布的解决方案不同,所以我想我会发布它。

knockout 版本:1.2.1 -- (knockout-1.2.1.js)

要取消选中 Knockout 绑定(bind)的复选框,我使用了以下内容

$('YourCheckBoxHere').removeAttr('checked');
$('YourCheckBoxHere').triggerHandler('click');

为了检查由 Knockout 绑定(bind)的复选框,我使用了以下内容

$('YourCheckBoxHere').attr('checked', 'true');
$('YourCheckBoxHere').triggerHandler('click');

希望如果其他解决方案不起作用,也许这会 =) ...在这个问题上浪费了大约 3 个小时。

关于jquery - 使用 Jquery 更改值时 KnockoutJS 属性不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767635/

相关文章:

javascript - 无法使用 jQuery 删除 img 的属性

javascript - knockoutjs 可观察数组和排序函数 : UI is not updated

javascript - 如何使用 Knockout 和自定义绑定(bind)将 JSON DateTime 转换为可读的日期和时间

javascript - Select2 与 Knockout.js 初始值

javascript - 创建多个位于彼此之上的可放置 sibling

Javascript:更改元素的ID

PHP+AJAX 与 MySQL - 每 2 秒查询一次,在 TIME_WAIT 中太多

javascript - 阵列中的 knockout 阵列

javascript - Knockout 从 observableArray 获取对象

php - jQuery ajax JSON 自定义错误处理