淘汰赛无法识别手动点击 [英] Knockout does not recognize manually click

查看:83
本文介绍了淘汰赛无法识别手动点击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我正在通过jquery单击单选按钮,但kickout.js无法识别它.它仍然显示首次单击的值.

I am clicking radio button by jquery but knockout.js does not recognize it.Still it shows first clicked value.

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

推荐答案

这是因为淘汰赛仅订阅选中的单选/复选框元素的点击事件.如果您签出绑定处理程序代码,则将其选中.它是这样做的.

This because Knockout is subscribing to the click events of checked radio/checkbox elements only. If you checkout the binding handler code for checked. It does this.

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
            }

因此,为了使您的代码正常工作,请执行此操作.

So in order to get your code to work do this.

$(':radio:last').prop('checked', true).click();

但是,如果目标是检查最后一个值,为什么不这样做

However if the goal is to check the last value, why not just do

viewModel.spamFlavor("msg");

这将达到相同的结果.

希望这会有所帮助.

这篇关于淘汰赛无法识别手动点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆