Javascript 敲除不识别手动单击
这是样品 我正在单击jquery的单选按钮,但knockout.js无法识别它。它仍然显示第一次单击的值Javascript 敲除不识别手动单击,javascript,knockout.js,Javascript,Knockout.js,这是样品 我正在单击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 typ
<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())
向我发送垃圾邮件:
垃圾邮件的首选口味:
樱桃
杏仁
味精
var viewModel={
WANTSPAM:ko.可观察(真),
spamFlavor:ko.可观察(‘樱桃’)
};
应用绑定(视图模型);
$(':radio:last')。单击();
警报(viewModel.spamFlavor())
我有两个不同的jsfiddle,因为我不确定你到底想要什么
当手动单击最后一个单选按钮时,第一个将通过警报进行响应
第二个是您发布的没有警报的/57/jsiddle
使用带有函数的警报或控制台.log将实际调用该函数。也就是说,在手动设置后,。单击()
到最后一个单选按钮,它会意外地重置回cherry
,因为这是默认值
重新编辑:第二个jsiddle现在包含警报,以不调用函数的语法编写&现在使用短标记添加$(':radio:last')。attr('checked',true)代码>除了触发外,单击使其适用于我:
这是因为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");
这将达到同样的结果
希望这有帮助。是的,它可以工作,但有点脏,所以我想知道问题出在哪里?问题的原因是浏览器、jquery还是敲除?