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/
规格:
- jQuery1.9.1
- jsTree 3.2.1
密码
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);
});
我做了一个 AJAX 调用来创建和填充我的 JSTree div。我激活了 checkbox 插件并尝试 check 我的 AJAX 结果回调中的所有复选框。没用。
我将相同的功能(将选中所有框)绑定到一个按钮,在这里,它起作用了。
我还尝试通过 自定义事件 和 jQuery 检查所有复选框,但它没有执行任何操作,如 AJAX 调用
这是 JSTree 的问题还是我遗漏了什么?
我在 JsFiddle 中复制了这个 问题 (?):https://jsfiddle.net/Lyyn/c74wpa6z/
规格:
- jQuery1.9.1
- jsTree 3.2.1
密码
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);
});