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

Jen*_*onD 14 javascript knockout.js

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

请看这里小提琴

查看型号:

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

    click: function(model){
        console.log(model);
    }
};
Run Code Online (Sandbox Code Playgroud)

视图:

<input type="radio" name="flavorGroup" value="cherry" 
       data-bind="checked: spamFlavor, click:click" />
Run Code Online (Sandbox Code Playgroud)

nem*_*esv 39

click活动文件:

默认情况下,Knockout将阻止click事件采取任何默认操作.
...
但是,如果您确实希望让默认click操作继续进行,只需return true从您的单击处理函数开始.

因此,您的单选按钮会因您的click处理程序而重置,并且需要return true在最后修复它:

click: function(){
   alert('Hi');
   return true;
}
Run Code Online (Sandbox Code Playgroud)

演示JSFiddle.


Nic*_*zel 6

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

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

只需尝试:

return true;

作为你的唯一代码handler.

摆弄:http://jsfiddle.net/SinisterSystems/jhHkD/4/


Lin*_*vel 5

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

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

要么

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