knockout js单选按钮单击事件重置选择

时间:2014-01-21 05:49:40

标签: javascript knockout.js

我在单选按钮列表上绑定了“已检查”和“单击”事件。但是,只要单击单选按钮,选择就不会停留。我一定是做错了。如果你们能指出我正确的方向,真的很感激。

请参阅Fiddle Here

查看型号:

var viewModel = {
    wantsSpam: ko.observable(true),
    spamFlavor: ko.observable('cherry'),

    click: function(model){
        console.log(model);
    }
};

查看:

<input type="radio" name="flavorGroup" value="cherry" 
       data-bind="checked: spamFlavor, click:click" />

3 个答案:

答案 0 :(得分:37)

来自click event documentation:

  

默认情况下,Knockout会阻止click事件采取任何默认操作   ...
  但是,如果您确实希望继续执行默认的click操作,只需点击处理程序函数中的return true

因为您的click处理程序重置了您的单选按钮并修复它,您最后需要return true

click: function(){
   alert('Hi');
   return true;
}

演示JSFiddle

答案 1 :(得分:6)

基本上,您的点击处理程序最终不会捕获您想要保留的值。

发生的事情是,在您选择项目后,它将恢复为默认值。

只需尝试:

return true;

作为handler中的唯一代码。

小提琴:http://jsfiddle.net/SinisterSystems/jhHkD/4/

答案 2 :(得分:5)

您只需删除点击事件或使用点击事件中的return true即可。因为Knockout阻止click事件采取任何默认操作。这意味着,如果您在标签(链接)上使用点击绑定,例如,浏览器将只调用您的处理程序函数,而不会导航到链接的href

var viewModel = {
    wantsSpam: ko.observable(true),
    spamFlavor: ko.observable('cherry'),
    /*click: function(){
      alert('Hi');
    }*/
};

或者

var viewModel = {
    wantsSpam: ko.observable(true),
    spamFlavor: ko.observable('cherry'),
    click: function(){
      alert('Hi');
      return true;
    }
};