带有 knockout 数据绑定(bind)的复选框在选中的事件上给出错误的值

标签 checkbox knockout.js onchange

<input type="checkbox" data-bind="checked: appealsFromThisCase, event: { change: onappealsFromThisCaseChange}" id="appealsforCaseCheckBox"/>

   vm.onappealsFromThisCaseChange = function () {
        if (vm.appealsFromThisCase())
        {
            vm.predicate(new breeze.Predicate("CaseId", "==", caseID));
            return datacontext.getCaseAppeals().then(function () {
                return true;
            });
        }
        } 
        else
            return vm.getAppeals();

上面是一个复选框,它绑定(bind)到appealsFromThisCase 可观察的值,该可观察值最初为 false。 在更改事件中, onappealsFromThisCaseChange 被触发,并且我看到可观察的appealsFromThisCase 在未选中复选框时给出 true ,在选中复选框时给出 false 。

最佳答案

看起来 ko 以一种奇怪的方式处理更改事件。 fiddle :http://jsfiddle.net/wnLyV/1/

js:

var VM = function(){
    var self = this;
    self.appealsFromThisCase = ko.observable(false);
    self.appealsFromThisCase.subscribe(function(value){
        console.log("from subscribe: " + value);
    })
    self.onappealsFromThisCaseClick = function(data){
        console.log("from click: " + data.appealsFromThisCase());
        return true;
    }
    self.onappealsFromThisCaseChange = function(data){
        console.log("from change: " + data.appealsFromThisCase());
        return true;
    }    
}


ko.applyBindings(new VM());

另请参阅这些:

knockout.js and listen to check event on checkbox

Knockout checkbox change event sends old value

您能否将更改事件绑定(bind)替换为单击绑定(bind)或订阅(如 fiddle 中所示),或者您是否特别需要更改?

编辑:

因此,根据下面的评论,最终答案是:

onappealsFromThisCaseChange 函数包装到另一个函数中,该函数将是实际的处理程序并始终返回 true。因此,只需创建另一个处理程序,如下所示:

function(){ 
    onappealsFromThisCaseChange(); 
    return true; 
}

关于带有 knockout 数据绑定(bind)的复选框在选中的事件上给出错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19791973/

相关文章:

jquery - 保存复选框的值

android - 如何在动态 View 中只选择一个复选框

javascript - 简单的复选框绘图程序未加载

javascript - 约束验证和 knockout 验证

javascript - 在 Mobile Safari 中选择 onchange 后,将焦点设置到输入字段

javascript - jQuery $el.trigger ('change' ) 不会触发 native 监听器

php - onchange 重新加载页面,值为 select

c# - CheckedChanged 事件中的问题

javascript - 使用 Knockout JS 过滤数据

javascript - knockout 绑定(bind)处理程序不起作用 : Why?