JsTree Open a node then select a child node (using json_result)

Joe picture Joe · Sep 5, 2011 · Viewed 23.2k times · Source

I am having trouble with a JsTree I am using in an MVC2 project. I would like to create a function to deselect/close all nodes on the tree. Then open a specific node, and select a specific child node (I have the Id values for both).

The trouble is that the select_node is always called before the open_node finishes, so the node is not selected, as the tree has not loaded the data yet, and the node ID does not exist.

I first tried this function.

$('#demo3').jstree('deselect_all');
$('#demo3').jstree('close_all');
$('#demo3').jstree("open_node", $('#ParentId'), false, true); 
$('#demo3').jstree("select_node", $('#ChildId'));

I then tried moving the code to the select_node and move_node binds of the tree, but no luck. At the moment I'm stuck using a setTimeout(), which is a horrible solution.

Does anyone know how I can tell the tree to only select the node after opening has finished?

Answer

Nikos Steiakakis picture Nikos Steiakakis · Jun 19, 2012

You could try passing a function that selects the node as a callback like:

$('#demo3').jstree('open_node', '#ParentID', function(e, data) {
    $('#demo3').jstree('select_node', '#ChildId');
}, true);

This way select_node will be called once the open_node returns success.