Javascript 如何在敲除js中为复选框绑定更改事件?
我正在使用引导开关将复选框显示为开关,我想将一个函数绑定到此开关,因此,Javascript 如何在敲除js中为复选框绑定更改事件?,javascript,knockout.js,Javascript,Knockout.js,我正在使用引导开关将复选框显示为开关,我想将一个函数绑定到此开关,因此,单击数据绑定在这里没有帮助,因为复选框没有被单击。 因此,我可能需要一个“更改”数据绑定,如复选框具有的onChange事件,但当我尝试将change事件数据绑定到复选框时,它不起作用 这是我的数据绑定: <input type="checkbox" onText="Active" offText="Inactive" data-bind="bootstrapSwitchOn: ActiveFlag,
单击
数据绑定在这里没有帮助,因为复选框没有被单击。
因此,我可能需要一个“更改”数据绑定,如复选框具有的onChange
事件,但当我尝试将change
事件数据绑定到复选框时,它不起作用
这是我的数据绑定:
<input type="checkbox" onText="Active" offText="Inactive"
data-bind="bootstrapSwitchOn: ActiveFlag, change: function() { UpdateStatus() }" />
此开关将按如下方式呈现复选框:
<div class="has-switch" tabindex="0"
<div class="switch-on">
<span class="switch-left">Active</span
<label> </label
<span class="switch-right">Inactive</span>
<input type="checkbox" ontext="Active" offtext="Inactive"
data-bind="bootstrapSwitchOn: ActiveFlag, change: function() { UpdateStatus() }">
</div>
</div>
在my上展开:
您有一个名为ActiveFlag
的可观察绑定到bootstrapSwitchOn
绑定,该绑定在切换引导开关时更新
Knockoutjs有一个功能,允许您注册对观察到的更改的回调
记住这些要点,若您有一个可观察的对象绑定到切换的更改,并且您想在切换更改时调用某个函数,那个么您可以将您的函数注册为回调,以侦听可观察对象的更改
希望这个片段能够解释这个逻辑:
/**
*指示状态的bootstrapSwitch的敲除绑定处理程序
*开关的位置(开/关):https://github.com/nostalgiaz/bootstrap-switch
*/
ko.bindingHandlers.bootstrapSwitchOn={
init:函数(元素、valueAccessor、allBindingsAccessor、viewModel){
$elem=$(元素);
$(元素).bootstrapSwitch();
$(element).bootstrapSwitch('setState',ko.utils.unwrapObservable(valueAccessor());//设置初始状态
$elem.on('switch-change',函数(e,数据){
valueAccessor()(data.value);
});//更改时更新模型。
},
更新:函数(元素、valueAccessor、allBindingsAccessor、viewModel){
var vStatus=$(元素).bootstrapSwitch('state');
var vmStatus=ko.utils.unwrapobbservable(valueAccessor());
if(vStatus!=vmStatus){
$(元素).bootstrapSwitch('setState',vmStatus);
}
}
};
//您的viewmodel已绑定到网页
var vm=函数(){
this.log=ko.observearray([]);
//绑定到交换机的ActiveFlag observable,与交换机的状态同步
this.ActiveFlag=ko.可观察(假);
//每当开关状态改变时我想要调用的函数
var dosomethinghenswitchstatechanges=函数(值){
this.log.push('开关状态更改为:'+值);
}.约束(本);
//寄存器回调
var subscription=this.ActiveFlag.subscripte(doSomethingWhenSwitchStateChanges);
}
应用绑定(新vm())代码>
您是否尝试过事件:{change:function(){UpdateStatus()}}
?酷,它可以工作:-)您可以将它添加为答案,以便我可以将其标记为已回答吗?但是该事件触发两次而不是现在只触发一次订阅ActiveFlag
var x=this.ActiveFlag.subscribe(this.UpdateStatus)
我假设change
事件是由Knockout和BootstrapSwitch触发的。你能创建一个提琴吗?我的开关在一个自定义网格视图中,我可以启动我的函数,但它会触发两次而不是一次…你是否尝试将你的函数挂接到ActiveFlag
observable而不是change
绑定?它是否仍会触发两次?在您的解决方案中,如何将$data
传递给函数?除了ActiveFlag
@LiranFriedman之外,我还想使用更多的数据,您可以从我的示例中的函数访问视图及其范围。在您想要访问的视图模型范围之外有什么特别的内容吗?我正在从网格视图访问它,我需要整行数据,因为单击复选框会转到包含此数据的服务器。