这是样本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(使用前将#替换为@)