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中,创建输入,并手动将输入更改事件连接到数组中相应的可观察事件。