2013-04-24 73 views
4

我有一个复选框,我想绑定一个函数,如果复选框被选中则执行某些操作,而如果复选框没有被选中则执行某些操作。Knockout复选框问题

但是复选框不会保持检查状态。它会在函数被调用时被检查,但在退出函数后会被取消选中。我究竟做错了什么?

这里是我想要做的一个样本: http://jsfiddle.net/GSeFD/

JS:

function MyViewModel() { 
    var self = this; 
    self.click = function(data,event) { 
     if ($('#checkbox').is(':checked')){ 
      console.log('checked'); 
     } 
     else{ 
      console.log('unchecked'); 
     } 
    } 
} 
ko.applyBindings(new MyViewModel()); 

HTML:

<input type="checkbox" id="checkbox" data-bind="click: $root.click" /> 

回答

4

click处理程序,你需要return true如果您想要触发默认的浏览器事件(例如,检查复选框)

self.click = function(data,event) { 
    if ($('#checkbox').is(':checked')){ 
     console.log('checked'); 
    } 
    else{ 
     console.log('unchecked'); 
    } 
    return true; 
} 

演示JSFiddle.

又见文档:Note 3: Allowing the default click action

通过也应该考虑使用checked binding如果您正在使用的复选框的工作方式。