以下是示例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())
答案 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);
使其对我有用:
答案 2 :(得分:0)