Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 顶级绑定上的输入更改事件侦听器_Javascript_Knockout.js - Fatal编程技术网

Javascript 顶级绑定上的输入更改事件侦听器

Javascript 顶级绑定上的输入更改事件侦听器,javascript,knockout.js,Javascript,Knockout.js,有没有一个击倒的方法可以做到这一点 标记: 根据RESTAPI返回的任何内容,这些复选框可能会被选中,也可能不会被选中 在“topbinding”的ko绑定中: ko.bindingHandlers.topbinding = { init: function (element) { var $checkboxes = $(element).find('input[type=checkbox]'); $checkboxes.on('change', f

有没有一个击倒的方法可以做到这一点

标记:


根据RESTAPI返回的任何内容,这些复选框可能会被选中,也可能不会被选中

在“topbinding”的ko绑定中:

ko.bindingHandlers.topbinding = {
    init: function (element) {
        var $checkboxes =  $(element).find('input[type=checkbox]');
        $checkboxes.on('change', function() {
           console.log('changed');
        });
     }
}
问题:如果RESTAPI交付的模型值-(在渲染过程中稍后到达)更新复选框值,则不会触发“更改”事件。单击复选框可以证明jq侦听器设置良好,一切正常

有什么想法吗?我们试图避免将绑定直接添加到复选框中-为其他创建标记的人保持简单


编辑:不确定我问得很好!再来一次

假设我们在
标签上设置了一些javascript来查找
,然后将它们重新写入一些看起来时髦的“select”类型
  • ,并隐藏
    选择输入,js监听
  • 上的事件以在幕后设置select值

    当用于此的KO viewmodel值绑定稍后到达(比如来自ajax请求)并更新
    值时会发生什么情况?表单上绑定的js(进行假选择)如何侦听更改


    通过将ko.bindingHandler直接添加到输入中,我已经能够做到这一点,但我正在寻找一种可以将其设置为顶级的方法。

    根据您最近的评论,我相信自定义绑定可能会解决您的淘汰问题。
    没错,viewmodel用于逻辑&数据,绑定用于ui。
    如果你想让开发人员容易,因为你有一个复杂的绑定,你应该考虑创建一个自定义绑定,而不是使用标准的绑定。 我通常将其用于日期选择器和其他外部组件。
    代码可能如下所示:

    ko.bindingHandlers.foo= {
        init:function(element, valueAccessor, allBindingsAccessor) {
            $(element).on('change', function() {
              console.log('changed');
            });
        }
    };
    
    以及您的标记:

    <div data-bind='topbinding:true'>
      <input type="checkbox" data-bind="foo:checkboxvalue_one"/>
      <input type="checkbox" data-bind="foo:checkboxvalue_two"/>
      <input type="checkbox" data-bind="foo:checkboxvalue_three"/>
    </div>
    
    
    

    这样,每当您使用新数据更新一个可观察对象时,来自定制bindingHandler的init函数就会触发,您可以完全自由地处理ui元素
    我不是100%确定,但我认为如果不覆盖更新方法,默认的更新机制仍然有效,如果不起作用,则需要手动设置和更新值(这再次让您可以自由地将ui映射到viewmodel可观察对象)。

    Wew,我怀疑您是否能找到答案,至少有一个答案“很好”,因为这与淘汰赛应该为你做的事情大相径庭。从本质上说,我认为你的问题可能是对其他人的重复。。这里是小提琴什么是改变方法的复选框的重点?你们只是想检测是否至少有一个复选框发生了变化吗?谢谢大家!同意@Jeroen,我以为我会以非淘汰赛的方式进行这件事!目前,我正在将绑定直接添加到复选框中,因此可以通过ko捕获更改。。更新函数,但最好设置为levelThank@Kristoff,+1这就是我们实际正在做的。我们希望有一种方法可以在div元素上设置一次绑定,然后以某种方式委托侦听,以在其内部的输入上进行“更改”。(我想现在和以后标记可能会更改时,添加一个输入会更少)如果这对您来说真的很重要,我想您可以在div上创建一个自定义绑定,传递一个观察值数组。在init中,创建输入,并手动将输入更改事件连接到数组中相应的可观察事件。