2013-04-07 43 views
1

伙计我遇到了重命名和JsTree问题。我创建了一个JS小提琴来突出这个问题。 http://jsfiddle.net/KJYrs/。我的方案是我想验证输入的名称不是默认名称或包含特殊字符。当我尝试在初次失败尝试后触发重命名事件时,内联编辑器出现在根节点上方。Jstree重命名问题。内联编辑器在根节点上方打开

<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

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

$(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/

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

+1

Aristos非常感谢你!这一直让我疯狂! – 2013-04-07 08:02:02

+0

@DeclanMcLaughlin:你也可以upvote答案;-) – Radek 2013-04-07 23:18:25