我有一个jstree设置(在div id =" surveyManager")。我已经将dbclick和rename函数绑定到它,如下所示:
.bind("rename.jstree", function (node, data) {
edit_node(node,data);
}),
.bind("dblclick.jstree", function (event) {
//Double Click to Rename
jQuery("#surveyManager").jstree("rename");
})
此处edit_node是一个必须实现通过ajax调用传递所有节点信息的函数。
是否可以设置树,这样在dbclick上,我可以只触发edit_node(节点,数据),而不是重命名节点。也许是另一个jstree函数,或者我可以定义它的某个地方。请帮忙
答案 0 :(得分:2)
对任何读这个答案的人。我不知道这个答案是否适用于旧的jstree或其他什么,但它对我没有用。我在此jsfiddle上实施了点击修改。
以下是有效的代码:
$('#jstree_demo_div2')
// listen for event
.on('select_node.jstree', function (e, data) {
var node = data.instance.get_node(data.selected[0]);
data.instance.edit(node);
});

答案 1 :(得分:1)
我在这里回答我自己的问题,我通过尝试其他一些事情来解决这个问题。 我们不需要在双击上进行重命名功能进行编辑,而是可以使用select_node和编辑项目。
传递的参数是事件和数据。我们可以使用event.target来获取节点信息和数据,这样我们就可以简单地调用其他函数。
.bind("select_node.jstree", function (e,data) {
var node = $(e.target).closest("li");
edit_node(node,data);
});
感谢您的帮助
答案 2 :(得分:1)
我不确定我理解你的问题,但是如果你想要双击进行重命名试试:
tree.off('dblclick').on('dblclick','.jstree-anchor', renameNode);
function renameNode() {
var instance = $.jstree.reference(this),
node = instance.get_node(this);
var old = node.text.replace(/\s+$/, ''); // trim right spaces
inst.edit(node, null, function(node, success, cancelled) {
if (!success || cancelled) return;
if (node.text.replace(/\s+$/, '')==old) return;
// all good, your rename code here
});
}
需要.off('dblclick')来防止双击时默认的jstree开放节点
请注意,如果您还在某处绑定树“click”事件,它也会触发dblclick。将“click”更改为“singleclick”并使用jquery.singleclick.js
答案 3 :(得分:0)
您可以使用jQuery'a trigger方法触发定义的事件。
这可以在下面实施。
.bind("rename.jstree", function (node, data) {
edit_node(node,data);
}),
.bind("dblclick.jstree", function (event) {
//Double Click to Rename
//jQuery("#surveyManager").jstree("rename");
jQuery.trigger("rename.jstree");
})