Javascript 剑道树视图复选框-父节点检查-更改每个复选框上的事件
我有一个带有父节点和子节点的2级剑道UI树视图。 检查父节点时,将自动检查所有子节点(包括父节点) 现在我想发送一个具有当前树选择状态的事件。 问题是当我尝试在dataSource.change方法中执行此操作时,因为它会分别在每个复选框选择上激发(1个父节点+3个子节点=4个更改事件)。这是代码的样子:Javascript 剑道树视图复选框-父节点检查-更改每个复选框上的事件,javascript,kendo-ui,Javascript,Kendo Ui,我有一个带有父节点和子节点的2级剑道UI树视图。 检查父节点时,将自动检查所有子节点(包括父节点) 现在我想发送一个具有当前树选择状态的事件。 问题是当我尝试在dataSource.change方法中执行此操作时,因为它会分别在每个复选框选择上激发(1个父节点+3个子节点=4个更改事件)。这是代码的样子: treeView.data("kendoTreeView").dataSource.bind("change", function() { alert('event fired!');
treeView.data("kendoTreeView").dataSource.bind("change", function() {
alert('event fired!');
});
我已经创建了一个工作示例
是否存在要附加到的另一个事件,以便在更新所有复选框后仅触发一个事件?
或者有一种方法可以将所有这些“更改”事件分组,只触发一个事件?我以以下解决方案结束:
tree.data("kendoTreeView").dataSource.bind("change", function() {
treeView = tree.data("kendoTreeView");
checkedNodes = [];
checkedNodeIds(treeView.dataSource.view(), checkedNodes);
if (!timeoutSet) {
setTimeout(fireCheckboxChangeOnce, 50);//fires only one event when parent checkbox checks all the children
timeoutSet = true;
}
});
只有第一个事件创建对函数的延迟调用(使用setTimeout()。
所有剩余的“更改”事件仅修改checkedNodes参数
fireCheckboxChangeOnce函数也会清除时间开始标志。我以以下解决方案结束:
tree.data("kendoTreeView").dataSource.bind("change", function() {
treeView = tree.data("kendoTreeView");
checkedNodes = [];
checkedNodeIds(treeView.dataSource.view(), checkedNodes);
if (!timeoutSet) {
setTimeout(fireCheckboxChangeOnce, 50);//fires only one event when parent checkbox checks all the children
timeoutSet = true;
}
});
只有第一个事件创建对函数的延迟调用(使用setTimeout()。
所有剩余的“更改”事件仅修改checkedNodes参数
fireCheckboxChangeOnce函数也会清除TimeStart标志。谢谢-这是可行的,但理想情况下我们应该寻找一个没有超时的解决方案-这是可行的,但理想情况下我们应该寻找一个没有超时的解决方案