CheckBox未在Knockoutjs中检查

时间:2014-10-14 07:31:41

标签: checkbox knockout.js

我在data-bind内使用了一个带有功能的复选框,但我无法check复选框。

查看:

<input type="checkbox" data-bind="click: function(){ f('hello parameter'); }">Click me

查看型号:

var VM = function () {
    this.f = function (param) {
        alert(param); // here i am getting 'hello parameter'
        return true;
    }
}

ko.applyBindings(new VM());

这是我的Fiddle

2 个答案:

答案 0 :(得分:13)

默认情况下,click绑定会根据您的JavaScript单击事件处理程序将处理所有内容的假设阻止对单击的默认反应。你需要回归&#34; true&#34;无论如何,要从f()函数中获取默认行为,而不是data-bind内的包装器:

<input type="checkbox" data-bind="click: function() { f('hello parameter'); }">

应该是

<input type="checkbox" data-bind="click: function() { return f('hello parameter'); }">

答案 1 :(得分:5)

没有代码的上下文,你不清楚你打算如何使用这个控件。使用复选框,您通常会使用绑定到布尔值observable的 checked binding

  

选中的绑定将可检查的表单控件(即复选框()或单选按钮())与视图模型上的属性链接起来。

使用选中绑定编写此代码的另一种方法是:

示例代码:

var VM = function () {
  var self = this;
  self.myCheck = ko.observable(false);

  self.myCheck.subscribe(function () {
    alert('checked value = ' + self.myCheck());
  });
}

ko.applyBindings(new VM());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div>
  <input type="checkbox" data-bind="checked: myCheck" />
  Click me
</div>

通过这个例子,有一个跟踪复选框值self.myCheck的observable。因此,选中/取消选中复选框时,self.myCheck()将设置为true / false。

为了在值改变时提供一些输出或运行一些代码,我已经订阅了observable,这基本上意味着每次更改observable的值时,都会触发警报(或任何代码)你放在那里。)

Demo On JS Fiddle