gpt4 book ai didi

javascript - 如何在 dynatree 中以编程方式选择子节点?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:22:41 25 4
gpt4 key购买 nike

我在我的应用程序中使用 jQuery 的 dynaTree,我想在选择父节点时以编程方式选择所有子节点。我的树结构如下

<div id = "tree">
<ul>
<li>package 1
<ul>
<li>module 1.1
<ul>
<li> document 1.1.1</li>
<li> document 1.1.2</li>
</ul>
</li>
<li>module 1.2
<ul>
<li>document 1.2.1</li>
<li>document 1.2.2</li>
</ul>
</li>
</ul>
</li>
<li> package 2
<ul>
<li> module 2.1
<ul>
<li>document 2.1.1</li>
<li>document 2.1.1</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>

现在我想要的是,当我单击标题为“包 1”的树节点时,它的所有子节点即(模块 1.1、文档 1.1.1、文档 1.1.2、模块 1.2、文档 1.2.1、文档 1.2 .2) 也应该被选中。

以下是我尝试使用的方法:

$("#tree").dynatree({
onSelect: function(flag, dtnode) {
// This will happen each time a check box is selected/deselected
var selectedNodes = dtnode.tree.getSelectedNodes();
var selectedKeys = $.map(selectedNodes, function(node) {

//alert(node.data.key);
return node.data.key;


});
// Set the hidden input field's value to the selected items
$('#SelectedItems').val(selectedKeys.join(","));

if (flag) {
child = dtnode.childList;

alert(child.length);
for (i = 0; i < child.length; i++) {
var x = child[i].select(true);
alert(i);
}
}
},
checkbox: true,
onActivate: function(dtnode) {
//alert("You activated " + dtnode.data.key);
}


});

if(flag) 条件下,我获得了用户选择的元素的所有子节点,它为我提供了我可以从 alert(child.length) 语句中看到的正确值。然后我运行循环以选择所有子项,但循环永远不会超出语句 var x = child[i].select(true);

而且我永远看不到正在执行的语句alert(i)。上述语句的结果是,如果我选择包 1,模块 1.1 和文档 1.1.1 也被选中,但它从不执行 alert(i) 语句 - 没有选择包 1 的其他子项。在我看来,当第一次执行 child[i].select(true) 语句时,它还会触发其子项的 on select 事件,从而产生一种递归的感觉

我的想法对吗?无论递归或它到底做了什么,它都不会完成循环并执行下一条指令 alert(i)

请帮我解决这个问题。我很想看到这个警报,非常感谢任何建议和帮助。

最佳答案

几乎没有测试过,但你可以尝试这样的事情:

$(function(){
var inEventHandler = false;
$("#tree").dynatree({
checkbox: true,
selectMode: 2,
[...]
onSelect: function(select, dtnode) {
// Ignore, if this is a recursive call
if(inEventHandler)
return;
// Select all children of currently selected node
try {
inEventHandler = true;
dtnode.visit(function(childNode){
childNode.select(true);
});
} finally {
inEventHandler = false;
}
}

关于javascript - 如何在 dynatree 中以编程方式选择子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2827009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com