下面是示例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())
这是因为淘汰赛订阅了只检查无线电/复选框元素的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");
这将实现相同的结果。
希望这可以帮助。
添加$(':radio:last').attr('checked', true);
除了触发点击使得它为我工作:
http://jsfiddle.net/jearles/HhXGH/61/
我有两个不同的jsFiddles,因为我不知道你以后到底是什么。
第一次 的jsfiddle 手动点击最后一个单选按钮时,将通过警报响应。
第二个 的jsfiddle是没有警报的发布/ 57 /的jsfiddle。
使用警报或执行console.log与函数实际上会调用该函数。 这就是说,你已经手动设置后.click()
到最后一个单选按钮,它在不经意间重新回到cherry
因为这是默认值。
重新编辑: 第二的jsfiddle现在包括警报写在语法不调用函数与现在使用短标记 。