在使用jstree重命名之前,双击以编辑节点

时间:2014-01-08 15:43:52

标签: javascript jquery jstree

我有一个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函数,或者我可以定义它的某个地方。请帮忙

4 个答案:

答案 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");
})