Knockout无法识别手动点击

时间:2012-05-26 19:23:27

标签: javascript knockout.js

以下是示例http://jsfiddle.net/HhXGH/57/

我点击了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())

3 个答案:

答案 0 :(得分:4)

这是因为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");

这将获得相同的结果。

希望这有帮助。

答案 1 :(得分:1)

除了触发点击之外,添加$(':radio:last').attr('checked', true);使其对我有用:

http://jsfiddle.net/jearles/HhXGH/61/

答案 2 :(得分:0)

我有两个不同的jsFiddles ,因为我不确定你接下来是什么。

第一个 jsFiddle会在最后一个单选按钮手动点击时通过提醒进行回复。

jsFiddle是您发布的 / 57 / jsFiddle,没有提醒。

使用带有功能警告或console.log 实际上会调用该功能。也就是说,在您手动设置 .click()到最后一个单选按钮后,它会无意中重置为cherry,因为这是默认值。

重新编辑 第二 jsFiddle现在包含用语法编写的警告,该语法不会调用函数&amp;现在使用短标记