我知道它已被问过100个imes,但我无法找到适合我的解决方案。
我有这些单选按钮:
<div class="left-floated-box" >
<input type="radio" name="options" value="1" data-bind="checked:loadFilteredHistory">1
</div>
<div class="left-floated-box" >
<input type="radio" name="options" value="2" data-bind="checked:loadFilteredHistory">2
</div>
正如您所看到的,我正在尝试调用名为loadFilteredHistory
就像:
一样简单loadFilteredHistory = function(){
console.log("I'm inside of teh function");
};
但是当我点击radiobutton时没有任何反应。我在这里错过了什么?为什么我不能调用这个功能?我知道这是非常小的东西,但我现在无法发现它。
答案 0 :(得分:2)
已检查的数据绑定更多用于将当前复选框值与模型中的变量同步(双向绑定),如果您想要侦听选择,则可以绑定点击,如下所示:
<div class="left-floated-box" >
<input type="radio" name="options" value="1" data-bind="click:loadFilteredHistory">1
</div>
<div class="left-floated-box" >
<input type="radio" name="options" value="2" data-bind="click:loadFilteredHistory">2
</div>
然后你需要创建一个带有相应函数的模型,最后你将这些绑定应用于传递模型的ko.applyBindings。我添加了一个console.log语句,向您展示如何通过event.currentTarget获取单击的复选框。
var viewModel = {
loadFilteredHistory: function(model, event) {
console.log("Inside the function");
console.log("Clicked checkbox = " + event.currentTarget.value);
return true;
}
}
ko.applyBindings(viewModel);
答案 1 :(得分:2)
我创建了一个observable来绑定复选框:
self.selectedOption = ko.observable();
然后订阅该observable以在所选选项更改时执行您的操作:
self.selectedOption.subscribe(function(newValue) {
console.log('selectedOption change', newValue);
});
您现在可以将selectedOption
绑定到checked
绑定处理程序:
<div class="left-floated-box" >
<input type="radio" name="options" value="1" data-bind="checked:selectedOption" />1
</div>
<div class="left-floated-box" >
<input type="radio" name="options" value="2" data-bind="checked:selectedOption" />2
</div>
答案 2 :(得分:0)
试试这个 -
$('.left-floated-box input').click(function() {
if($('input').is(':checked')) { alert("it's checked"); }
});
答案 3 :(得分:0)
你错过了#34; /输入&#34;代码
<div class="left-floated-box">
<input type="radio" id="button" name="options" value="1">1 </input>
</div>
<div class="left-floated-box">
<input type="radio" id="button" name="options" value="2">2 </input>
</div>
$('#button').click(function() {
alert("I'm inside of teh function");
});
答案 4 :(得分:0)
loadFilteredHistory
是viewModel的一种方法吗?根据你的片段的外观,它不是。
尝试这样的事情:
var myViewModel = {
radioButtonValue: ko.observable()
}
ko.applyBindings(myViewModel);
您可能还想澄清这是knockout.js的问题。 =)
更新:
实际上从它的外观来看,这个绑定不允许函数传递一个值。 它期望一个可观察的价值。对于radiobuttons,它会将新值传递给您的observable。 我已经更新了上面的代码段。
http://knockoutjs.com/documentation/checked-binding.html
要在发生此更改时调用函数,您可以使用myViewModel.radioButtonValue.subscribe(loadFilteredHistory)