淘汰赛无法识别手动点击 [英] Knockout does not recognize manually click
本文介绍了淘汰赛无法识别手动点击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下是示例 http://jsfiddle.net/HhXGH/57/
我正在通过jquery单击单选按钮,但kickout.js无法识别它.它仍然显示首次单击的值.
I am clicking radio button by jquery but knockout.js does not recognize it.Still it shows first clicked value.
<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())
推荐答案
这是因为淘汰赛仅订阅选中的单选/复选框元素的点击事件.如果您签出绑定处理程序代码,则将其选中.它是这样做的.
This because Knockout is subscribing to the click events of checked radio/checkbox elements only. If you checkout the binding handler code for checked. It does this.
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
}
因此,为了使您的代码正常工作,请执行此操作.
So in order to get your code to work do this.
$(':radio:last').prop('checked', true).click();
但是,如果目标是检查最后一个值,为什么不这样做
However if the goal is to check the last value, why not just do
viewModel.spamFlavor("msg");
这将达到相同的结果.
希望这会有所帮助.
这篇关于淘汰赛无法识别手动点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文