Jstree - 无法在 AJAX 调用中选中复选框,在经典调用中有效。一个问题?

Jstree - Can't check checkboxes in AJAX call, works in classic call. An issue?

我做了一个 AJAX 调用来创建和填充我的 JSTree div。我激活了 checkbox 插件并尝试 check 我的 AJAX 结果回调中的所有复选框。没用。

我将相同的功能(将选中所有框)绑定到一个按钮,在这里,它起作用了。

我还尝试通过 自定义事件 和 jQuery 检查所有复选框,但它没有执行任何操作,如 AJAX 调用

这是 JSTree 的问题还是我遗漏了什么?

我在 JsFiddle 中复制了这个 问题 (?)https://jsfiddle.net/Lyyn/c74wpa6z/


规格:


密码

HTML

<h1>
JSTree Demo
</h1>
<button id="btn">
Check All
</button>
<div id="jstree">

</div>

JS

// Populate the tree with some generic data
$.ajax({
    // ... initial ajax code with some generic data
    success: function(response) {
            var $tree = $("#jstree");
            $tree.jstree(response);
        
        // Try to check all boxes, it doesn't work
        checkAll($tree);
    }
});

// Try to check all boxes, here it works. Why.
$("#btn").click(function(){
        checkAll($("#jstree"));
})

// This will check all boxes inside the tree
function checkAll(tree) {
        tree.jstree(true).check_all();
}

那是因为在成功回调中调用 checkAll 时 jstree 还没有构建节点。只需将您的 checkAll 调用包装到 ready.jstree 事件中,如下所示。检查演示 - Fiddle.

...
success: function(response) {
    var $tree = $("#jstree");
    $tree.jstree(response).on('ready.jstree', function() {

        // Try to check all boxes
        checkAll($tree);

});