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>&nbsp;</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之外,我还想使用更多的数据,您可以从我的示例中的函数访问视图及其范围。在您想要访问的视图模型范围之外有什么特别的内容吗?我正在从网格视图访问它,我需要整行数据,因为单击复选框会转到包含此数据的服务器。