所以我的问题是,基本上,我在JsTree中设置了一些节点,它在我已经在我的页面上的一棵树上工作,但是那些动态加载的节点只能恢复选择。这意味着它们确实按预期被选中,但之后由于某种原因被取消选择。
选择代码:
selected.forEach(function(element,index,array){
if(element !== null)
$(value).parent().find(".filter-value-tree").jstree("select_node", "#"+element);
});
jquery-2.1.1.js中的代码行:
return typeof n !== U && n.event.triggered !== b.type ? n.event.dispatch.apply(a, arguments) : void 0
在该特定行之前,节点按预期选择。
显示我正在尝试做的基础知识的片段(它现在可以再现问题):
$("#testBtn").on("click", function() {
loadTree(getValueTree);
$("#filter-value-tree").jstree("select_node", "#2");
});
function loadTree(callback){
//Normally there would be a ajax request here, to be used with differenct callback functions
var response = '<li id="1">Information</li><li id="2">Service</li><li id="3">Claim</li><li id="4">Education</li>';
setTimeout(function(){
callback(response);
}, 1000);
}
function getValueTree(result){
$("#testDiv").append("<div id='filter-value-tree'><ul><li id='1'>Test1</li><li id='2'>Test2</li></ul></div>");
$("#filter-value-tree").find("ul").append(result);
$("#filter-value-tree").jstree({
'core' : {
'check_callback': true,
'multiple': true
},
"plugins" : [ "changed" ]
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" />
<button type="button" id="testBtn">Test</button>
<div id="testDiv"></div>
要结束它,还有更多信息,我正在从我的mysql数据库的php页面加载带有AJAX的jstree的内容。 ajax调用设置为async:false,只是有些人想知道它是否可以。加载按预期工作,我只是想说节点是被选中的,但是在一段时间后才被取消选择(如果我从jquery-2.1.1.js那一步调试该行,那么最后一件事就是调试器完成。)
我希望你能提前帮助我。
答案 0 :(得分:1)
您遇到的问题与同步/异步代码有关:
在此代码中:
loadTree(getValueTree);
$("#filter-value-tree").jstree("select_node", "#2");
...在调用 getValueTree
之前执行的最后一个语句。这是因为loadTree
将执行Ajax调用,但会立即返回而不调用回调。仅当响应将通过异步事件进入时才会调用回调。在当前代码完成运行之前永远不会处理此事件(即清空了调用堆栈)。只有这样才能处理队列中的事件。
要解决此问题,请将该语句移动到回调部分,例如,如下所示:
loadTree(function () {
getValueTree();
$("#filter-value-tree").jstree("select_node", "#2");
});