Here is a better solution - this adds a create_named_node to jstree itself and will only send a single create_node event when/if a node has been created and named (so there's no need for any additional code in delete_node, rename_node etc).
$.jstree.core.prototype.create_named_node = function(par, node, pos, callback) {
var inst = this, elem = inst.element[0];
var events = $._data(elem, 'events'); // save events
$._data(elem, 'events', {}); // cancel all events
inst.create_node(par, node, pos, function(newNode) {
inst.edit(newNode, '', function(newNode, status, cancel) {
if (!newNode.text || !status || cancel) {
inst.delete_node(newNode);
$._data(elem, 'events', events); // restore events
inst.element.focus();
} else {
$._data(elem, 'events', events); // restore events
if (callback) callback.call(inst, newNode);
inst.trigger('create_node', { node: newNode, parent:
par.id, position: pos });
}
});
});
};
Ivan there seems to still be focus problems, notice I had to add the inst.element.focus() after delete