Jstree重命名问题。内联编辑器在根节点上方打开

时间:2013-04-07 07:26:03

标签: asp.net jquery jstree

我有重命名和JsTree的问题。我创建了一个JS小提琴来强调这个问题。 http://jsfiddle.net/KJYrs/。我的情况是,我想验证输入的名称不是默认名称还是包含特殊字符。当我尝试在初始失败尝试后触发重命名事件时,内联编辑器出现在根节点上方。

<script type="text/javascript" class="source">
$(function () {
    $("#demo1").jstree({
        "plugins": ["themes", "html_data", "ui", "crrm", "contextmenu"]
    }).bind("rename.jstree", function (event, data) {
        //let's assume I do some vaidation here and it fails
        //so I want to rename until valid
        if (event.type === 'rename') {
            $("#demo1").jstree("deselect_all");
            $("#demo1").jstree("select_node", "#" + data.rslt.obj[0].id);
            $("#demo1").jstree("rename");
        }
    });
});
</script>

<div id="demo1" class="demo">
    <ul>
        <li id="phtml_1">   <a href="#">Root node 1</a>

            <ul>
                <li id="phtml_2">   <a href="#">Child node 1</a>

                </li>
                <li id="phtml_3">   <a href="#">Child node 2</a>

                </li>
            </ul>
        </li>
        <li id="phtml_4">   <a href="#">Root node 2</a>

        </li>
    </ul>
</div>

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:1)

问题出现是因为您在重命名内部调用重命名 - 不会崩溃,但会产生其他问题。一个简单的解决方案是在重命名结束后使用setTimeout as:

进行调用
$(function () {
    $("#demo1").jstree({
        "plugins": ["themes", "html_data", "ui", "crrm", "contextmenu"]
    }).bind("rename.jstree", function (event, data) {
        //let's assume I do some vaidation here and it fails
        //so I want to rename until valid
        if (event.type === 'rename') 
        {
            setTimeout(function(){
               $("#demo1").jstree("deselect_all");
               $("#demo1").jstree("select_node", "#" + data.rslt.obj[0].id);
               $("#demo1").jstree("rename");
            },100);
        }
    });
});

结果如下: http://jsfiddle.net/KJYrs/1/

现在您还有其他需要解决的问题,取消重命名,并禁用菜单直到结束。