淘汰赛不承认手动点击(Knockout does not recognize manually cl

2019-09-17 13:08发布

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

我的jQuery点击单选按钮,但knockout.js不承认it.Still它表示第一次点击的价值。

<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())

Answer 1:

这是因为淘汰赛订阅了只检查无线电/复选框元素的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");

这将实现相同的结果。

希望这可以帮助。



Answer 2:

添加$(':radio:last').attr('checked', true); 除了触发点击使得它为我工作:

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



Answer 3:

我有两个不同的jsFiddles,因为我不知道你以后到底是什么。

第一次 的jsfiddle 手动点击最后一个单选按钮时,将通过警报响应。

第二个 的jsfiddle是没有警报的发布/ 57 /的jsfiddle。

使用警报或执行console.log函数实际上会调用该函数。 这就是说,你已经手动设置.click()到最后一个单选按钮,它在不经意间重新回到cherry因为这是默认值。

重新编辑: 第二的jsfiddle现在包括警报写在语法不调用函数与现在使用短标记



文章来源: Knockout does not recognize manually click