Javascript 敲除不识别手动单击

Javascript 敲除不识别手动单击,javascript,knockout.js,Javascript,Knockout.js,这是样品 我正在单击jquery的单选按钮,但knockout.js无法识别它。它仍然显示第一次单击的值 <p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam" /></p> <div data-bind="visible: wantsSpam"> Preferred flavor of spam: <div><input typ

这是样品

我正在单击jquery的单选按钮,但knockout.js无法识别它。它仍然显示第一次单击的值

<p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam" /></p>
<div data-bind="visible: wantsSpam">
    Preferred flavor of spam:
    <div><input type="radio" name="flavorGroup" value="cherry" data-bind="checked: spamFlavor" /> Cherry</div>
    <div><input type="radio" name="flavorGroup" value="almond" data-bind="checked: spamFlavor" /> Almond</div>
    <div><input type="radio" name="flavorGroup" value="msg" data-bind="checked: spamFlavor" /> Monosodium Glutamate</div>
</div>


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

ko.applyBindings(viewModel);

$(':radio:last').click();

alert(viewModel.spamFlavor())
向我发送垃圾邮件:

垃圾邮件的首选口味: 樱桃 杏仁 味精 var viewModel={ WANTSPAM:ko.可观察(真), spamFlavor:ko.可观察(‘樱桃’) }; 应用绑定(视图模型); $(':radio:last')。单击(); 警报(viewModel.spamFlavor())
我有两个不同的jsfiddle,因为我不确定你到底想要什么

当手动单击最后一个单选按钮时,第一个将通过警报进行响应

第二个是您发布的没有警报的/57/jsiddle

使用带有函数的警报或控制台.log将实际调用该函数。也就是说,在手动设置后,
。单击()
到最后一个单选按钮,它会意外地重置回
cherry
,因为这是默认值

重新编辑:第二个
jsiddle现在包含警报,以不调用函数的语法编写&现在使用短标记

添加
$(':radio:last')。attr('checked',true)除了触发外,单击使其适用于我:


这是因为Knockout只订阅选中的radio/checkbox元素的click事件。如果您签出绑定处理程序代码以进行检查。它做到了这一点

var updateHandler = function() {
            var valueToWrite;
            if (element.type == "checkbox") {
                valueToWrite = element.checked;
            } else if ((element.type == "radio") && (element.checked)) {
                valueToWrite = element.value;
            } else {
                return; // "checked" binding only 
                responds to checkboxes and selected radio buttons
            }
因此,为了让代码正常工作,请执行以下操作

$(':radio:last').prop('checked', true).click();
但是,如果目标是检查最后一个值,为什么不这样做呢

viewModel.spamFlavor("msg");
这将达到同样的结果


希望这有帮助。

是的,它可以工作,但有点脏,所以我想知道问题出在哪里?问题的原因是浏览器、jquery还是敲除?