Knockout无法识别手动点击

2024-04-04

这是样本http://jsfiddle.net/HhXGH/57/ 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())

这是因为 Knockout 仅订阅选中的单选/复选框元素的单击事件。如果您签出已检查的绑定处理程序代码。它就是这样做的。

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");

这将达到相同的结果。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Knockout无法识别手动点击 的相关文章

随机推荐